我在另一个与 urlencode() 相关的论坛上问了一个问题,当一个人出现时轻快地说绝对需要在其之上使用 htmlentities,并且还建议我每次编写 URL 时都应该这样做。“为了有效和安全,他说”。我不明白为什么这可能是一个安全问题。这是他提到的代码:
echo '<a href="index.php?' . htmlentities('page=encode&code='.urlencode($code).'&login='.urlencode($login).'&codeconf=' . urlencode($codeconf)) . '">';
php手册确实提到了htmlentities。但没有进一步的解释:
注意... PHP 支持通过 arg_separator .ini 指令将参数分隔符更改为 W3C 建议的分号。不幸的是,大多数用户代理不会以这种分号分隔的格式发送表单数据。解决此问题的一种更便携的方法是使用 & 而不是 & 作为分隔符。您不需要为此更改 PHP 的 arg_separator。将其保留为 &,但只需使用 htmlentities() 或 htmlspecialchars() 对您的 URL 进行编码。
我用 & 替换了" & " ,我在 W3C 验证器中验证了我的页面,结果正常。
我仍然担心这个 htmlentities 问题。
- 为什么应该在 URL 中使用 htmlentities 有什么好的理由吗?
- 如果是,这是否适用于所有类型的 URL?
- 如果是,是出于安全原因吗?