繁体   English   中英

当使用htmlspecialchars来转义双引号时,为什么在使用ENT_SUBSTITUTE时需要ENT_QUOTES?

[英]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_COMPATENT_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM