我知道还有其他方法只转义单引号(such as this answer),但在我看来应该有一种使用htmlspecialchars()的方法。使用htmlspecialchars()仅转义单引号(仅留双引号)
根据手册,它应该是它们常量的一些组合,但根据它们的解释,我没有看到它。
是否有可能只转义单引号,留下双引号,htmlspecialchars()
?
我知道还有其他方法只转义单引号(such as this answer),但在我看来应该有一种使用htmlspecialchars()的方法。使用htmlspecialchars()仅转义单引号(仅留双引号)
根据手册,它应该是它们常量的一些组合,但根据它们的解释,我没有看到它。
是否有可能只转义单引号,留下双引号,htmlspecialchars()
?
使用用htmlspecialchars(...)
然后str_replace函数(...)在双引号
这里就是你要找的常量的组合。
$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
为什么你想逃避单引号,但没有双引号?那么,你可以避免双引号的原因,但不是单引号:因为你有一个字符串有很多的"
双引号和只有几个'
单引号,所以你想要坚持它在一个'
-defined字符串。
一个例子:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
产生大量的双引号的,所以是有意义的坚持在一个单引号分隔属性的结果,并保留双引号转义。
为什么你需要这个?这对我来说似乎是个问题。 – Halcyon
如果它只是单引号,然后使用str_replace –
[This](http://www.php.net/manual/en/function.htmlspecialchars.php#99185)可能有帮助 –