URL/HTML Escaping/Encoding

2022-08-30 20:26:14

我一直对URL / HTML编码/转义感到困惑。我正在使用PHP,所以想清理一些东西。

我能说我应该总是使用

  • urlencode:用于单个查询字符串部分

    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else');
    
  • htmlentities:用于转义特殊字符,以便浏览器正确呈现 if<>

是否有任何其他地方我可能会使用每个函数。我不擅长所有这些逃避的东西,总是被它们迷惑


答案 1

首先,你不应该使用大约99%的时间。相反,您应该使用 htmlspecialchars() 来转义文本,以便在 xml/html 文档中使用。 仅用于显示您使用的本机字符集无法显示的字符(如果您的页面采用 ASCII 格式,但您有一些要显示的 UTF-8 字符,则此功能很有用)。相反,只需制作整个页面UTF-8(这并不难),然后完成它。htmlentiteshtmlentities

就而言,你击中了头上的钉子。urlencode

所以,回顾一下:

  • 在 HTML 内部:

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

    $url = '?foo='.urlencode('bar');
    

答案 2

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

另请注意,如果您将url放入html上下文中(例如 - 在-tag中),则需要对其进行转义。因此,您经常会看到以下内容:hrefa

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

推荐