[英]when using htmlspecialchars to escape double-quotes, why is ENT_QUOTES required when using ENT_SUBSTITUTE?
在php 7.0.3版中使用htmlspecialchars
时,我注意到以下行为:
php > echo htmlspecialchars('"');
"
php > echo htmlspecialchars('"', ENT_SUBSTITUTE);
"
php > echo htmlspecialchars('"', ENT_QUOTES | ENT_SUBSTITUTE);
"
我们也想使用ENT_SUBSTITUTE
标志来转义双引号。 请注意,仅使用ENT_SUBSTITUTE
标志时,双引号不会转义。
如果我们想转义双引号,是否需要在ENT_SUBSTITUTE
加上ENT_QUOTES
标志? 为什么是这样?
htmlspecialchars的文档没有说使用ENT_SUBSTITUTE
时需要ENT_QUOTES
。 实际上,似乎提出了相反的建议-除非存在ENT_NOQUOTES
标志,否则双引号应始终转义。
当您将标志显式传递给htmlspecialchars
,将替换默认标志 。
htmlspecialchars($data)
等同于htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)
丢弃规则ENT_COMPAT
和ENT_HTML401
只使用规则从ENT_SUBSTITUTE
。
(并且ENT_COMPAT
导致双引号被转换)。
ENT_COMPAT | ENT_HTML401
ENT_COMPAT | ENT_HTML401
是$flags
参数的默认值。 当您改为传递ENT_SUBSTITUTE
,您将覆盖默认值。 现在不再使用ENT_COMPAT
,它负责报价。 如果要将ENT_SUBSTITUTE
添加到默认参数,则应正确编写:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.