逃生只有单引号(先不谈双引号)与用htmlspecialchars()(Escape only si

2019-09-17 05:14发布

我知道有逃逸,单引号(其他方式如这个答案 ),但在我看来,应该有使用方法用htmlspecialchars() 。

根据手册,它应该是他们的常量的组合,但根据他们的解释,我没有看到它。

是否有可能逃脱只有单引号,只留下了双引号,与htmlspecialchars()

Answer 1:

str_replace("'", "\\'", $string);

那里。

或者,使用ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES);


Answer 2:

这里就是你要找的常量的组合。

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);

这将难逃& ' < >但保留"独自一人。 ENT_QUOTES & ~ENT_COMPAT是位操纵语言,意思是’ 两个报价,减去双引号 ”。

这工作,因为这些常量是如何定义的。 PHP-SRC / EXT /标准/ html.h

#define ENT_HTML_QUOTE_NONE         0
#define ENT_HTML_QUOTE_SINGLE       1
#define ENT_HTML_QUOTE_DOUBLE       2

#define ENT_COMPAT      ENT_HTML_QUOTE_DOUBLE
#define ENT_QUOTES      (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
#define ENT_NOQUOTES    ENT_HTML_QUOTE_NONE

为什么你想逃避单引号,但没有双引号? 好了,你逃脱双引号,而不是单引号的原因相反:因为你已经有了一个字符串,有很多的"双引号只有少数'单引号,所以你要坚持在' -delimited字符串。

一个例子:

<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'

json_encode()创建大量的双引号的,所以是有意义的坚持在一个单引号分隔属性的结果,并保留双引号转义。



Answer 3:

使用用htmlspecialchars(...)

然后在一个双引号str_replace函数(...)



文章来源: Escape only single quotes (leave double quotes alone) with htmlspecialchars()