使用 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
标志?这是为什么?
documentation for htmlspecialchars并没有说使用ENT_SUBSTITUTE
时需要ENT_QUOTES
。事实上,它似乎暗示相反——双引号应该总是被转义,除非 ENT_NOQUOTES
标志存在。
当您显式将标志传递给 htmlspecialchars
时,您 替换默认标志 。
htmlspecialchars($data)
等同于 htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)
丢弃来自 ENT_COMPAT
和 ENT_HTML401
的规则到 just 使用来自 ENT_SUBSTITUTE
.[=18 的规则=]
(而ENT_COMPAT
导致双引号被转换)。
ENT_COMPAT | ENT_HTML401
是 $flags
参数的 默认值 。当您传递 ENT_SUBSTITUTE
而不是 时,您将覆盖默认值。它现在不再应用 ENT_COMPAT
,它负责引用。如果要加ENT_SUBSTITUTE
到默认参数,应该正确写成:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | 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
标志?这是为什么?
documentation for htmlspecialchars并没有说使用ENT_SUBSTITUTE
时需要ENT_QUOTES
。事实上,它似乎暗示相反——双引号应该总是被转义,除非 ENT_NOQUOTES
标志存在。
当您显式将标志传递给 htmlspecialchars
时,您 替换默认标志 。
htmlspecialchars($data)
等同于 htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)
丢弃来自 ENT_COMPAT
和 ENT_HTML401
的规则到 just 使用来自 ENT_SUBSTITUTE
.[=18 的规则=]
(而ENT_COMPAT
导致双引号被转换)。
ENT_COMPAT | ENT_HTML401
是 $flags
参数的 默认值 。当您传递 ENT_SUBSTITUTE
而不是 时,您将覆盖默认值。它现在不再应用 ENT_COMPAT
,它负责引用。如果要加ENT_SUBSTITUTE
到默认参数,应该正确写成:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)