URL/HTML 转义/编码

新手上路,请多包涵

我一直对 URL/HTML 编码/转义感到困惑。我正在使用 PHP,所以我想弄清楚一些事情。

我可以说我应该一直使用

  • urlencode :用于单个查询字符串部分
    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else');

  • htmlentities :用于转义特殊字符,如 <> 以便浏览器正确呈现

还有其他地方我可以使用每个功能吗?我不擅长所有这些逃避的东西,而且总是被它们弄糊涂。

原文由 Jiew Meng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 421
2 个回答

首先,你不应该在 99% 左右的时间里使用 htmlentities() 。相反,您应该使用 htmlspecialchars() 来转义文本,以便在 XML 和 HTML 文档中使用。

htmlentities 仅对显示您使用的本机字符集无法显示的字符有用(如果您的页面是 ASCII,但您有一些 UTF-8 字符想要显示,则它很有用).相反,只需将整个页面设为 UTF-8(这并不难),然后就可以了。

urlencode() 而言,您一针见血。

所以,回顾一下:

  • 内部 HTML:
   <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b>

  • 在 URL 内部:
   $url = '?foo=' . urlencode('bar');

原文由 ircmaxell 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是对的。虽然 - htmlspecialchars 很好,只要你的字符集是直的。无论如何你应该做的。所以我倾向于使用它,所以如果我把它搞砸了,我会早点发现。

另请注意,如果您将 URL 放入 HTML 上下文中(比如 - 在 href 标签的 a 中),则需要对其进行转义。所以你会经常看到类似的东西:

 echo "<a href='" . htmlspecialchars("?foo=" . urlencode($foo)) . "'>clicky</a>"

原文由 troelskn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏