在PHP7.0.3版本中使用htmlspecialchars时,我注意到了以下行为:
php > echo htmlspecialchars('"');
"
php > echo htmlspecialchars('"', ENT_SUBSTITUTE);
"
php > echo htmlspecialchars('"', ENT_QUOTES | ENT_SUBSTITUTE);
"我们想转义双引号,同时也使用ENT_SUBSTITUTE标志.注意,双引号在仅使用ENT_SUBSTITUTE标志时不会转义。
如果我们想转义双引号,ENT_QUOTES标志是否与ENT_SUBSTITUTE一起使用?为什么会这样呢?
htmlspecialchars文档没有说在使用ENT_SUBSTITUTE时需要ENT_QUOTES。事实上,它似乎表明相反的双引号应该总是被转义,除非ENT_NOQUOTES标志存在。
发布于 2018-07-19 14:35:12
ENT_COMPAT | ENT_HTML401是$flags参数的默认值。当您传递ENT_SUBSTITUTE 而不是时,您将重写默认设置。现在它不再应用ENT_COMPAT了,它负责引号。如果要将ENT_SUBSTITUTE添加到默认参数,则应正确地编写:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)发布于 2018-07-19 14:35:05
当您显式地将标志传递给htmlspecialchars时,替换默认标志。
htmlspecialchars($data)等价于htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)将规则从ENT_COMPAT和ENT_HTML401丢弃到--just--使用来自ENT_SUBSTITUTE的规则。
( ENT_COMPAT导致双引号被转换)。
https://stackoverflow.com/questions/51425302
复制相似问题