Luk*_*een 6 php escaping htmlspecialchars
我知道还有其他方法只能转义单引号(比如这个答案),但在我看来应该有一种方法可以使用htmlspecialchars().
根据手册,它应该是它们常量的某种组合,但根据它们的解释,我看不到它.
有可能只逃避单引号,只留下双引号htmlspecialchars()吗?
Nor*_*rse 11
str_replace("'", "\\'", $string);
Run Code Online (Sandbox Code Playgroud)
那里.
或者,使用 ENT_QUOTES
htmlspecialchars($string, ENT_QUOTES);
Run Code Online (Sandbox Code Playgroud)
这是你正在寻找的常数的组合.
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
Run Code Online (Sandbox Code Playgroud)
这将逃脱& ' < >,但一个人离开".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
Run Code Online (Sandbox Code Playgroud)
为什么你想要逃避单引号,而不是双引号?好了,你逃脱双引号,而不是单引号的原因相反:因为你已经有了一个字符串,有很多的"双引号,只有少数'单引号,所以你要坚持在'-delimited串.
一个例子:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
Run Code Online (Sandbox Code Playgroud)
json_encode() 创建了大量双引号,因此将结果保留在单引号分隔属性中是有意义的,并保留双引号未转义.