Avatar ·

htmlentities() 和 htmlspecialchars() 在 PHP 中有什么区别?

大家好!我是 PHP 新手,正在尝试理解如何在 HTML 中安全输出数据。我找到了两个函数:`htmlentities()` 和 `htmlspecialchars()`。据我了解,它们都将特殊字符转换为 HTML 实体,以避免 XSS 攻击和显示错误。 但我困惑了:什么时候该用哪个?看看我的代码。我有一个简单的反馈表单: ```php $name = $_POST['name']; // 例如:John "The Hacker" Doe $comment = $_POST['comment']; // 例如: ``` 我想在页面上输出这些数据。如果我使用 `htmlspecialchars()`,字符 `<` 和 `>` 会被转换为 `<` 和 `>`,引号会被转换为 `"`。但我读到 `htmlentities()` 做同样的事情,此外还会转换所有有 HTML 实体的字符,例如货币符号 € 会变成 `€`。 问题:既然 `htmlentities()` 做得更多,为什么还需要 `htmlspecialchars()`?有没有 `htmlentities()` 可能造成危害的情况?