我知道还有其他方法可以转义单引号(such as this answer),但在我看来应该有一种方法可以使用htmlspecialchars()。
根据手册,它应该是它们常量的某种组合,但根据它们的解释,我没有看到它。
是否可以仅使用单引号转义,仅使用双引号,htmlspecialchars()
?
答案 0 :(得分:9)
str_replace("'", "\\'", $string);
有
或者,使用ENT_QUOTES
htmlspecialchars($string, ENT_QUOTES);
答案 1 :(得分:9)
以下是您正在寻找的常量组合。
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
这将转义& ' < >
,但只留下"
。 ENT_QUOTES & ~ENT_COMPAT
是位操作语言,意思是“两个引号,减去双引号”。
这是因为这些常量的定义方式。 php-src/ext/standard/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
为什么你想要逃避单引号,而不是双引号?好吧,你要避开双引号,而不是单引号的原因相反:因为你有一个包含大量"
双引号和只有少量'
单引号的字符串,所以你我想把它贴在'
- 分隔的字符串中。
一个例子:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
创建了大量双引号,因此将结果保留在单引号分隔属性中是有意义的,并保留双引号未转义。
答案 2 :(得分:1)
使用htmlspecialchars(...)
然后str_replace(...)在双引号
上