我知道有逃逸,单引号(其他方式如这个答案 ),但在我看来,应该有使用方法用htmlspecialchars() 。
根据手册,它应该是他们的常量的组合,但根据他们的解释,我没有看到它。
是否有可能逃脱只有单引号,只留下了双引号,与htmlspecialchars()
我知道有逃逸,单引号(其他方式如这个答案 ),但在我看来,应该有使用方法用htmlspecialchars() 。
根据手册,它应该是他们的常量的组合,但根据他们的解释,我没有看到它。
是否有可能逃脱只有单引号,只留下了双引号,与htmlspecialchars()
str_replace("'", "\\'", $string);
那里。
或者,使用ENT_QUOTES
htmlspecialchars($string, ENT_QUOTES);
这里就是你要找的常量的组合。
$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()
创建大量的双引号的,所以是有意义的坚持在一个单引号分隔属性的结果,并保留双引号转义。
使用用htmlspecialchars(...)
然后在一个双引号str_replace函数(...)