18

应该对 href 属性的内容做什么:HTML 或 URL 编码?

<a href="???">link text</a>

一方面,由于 href 属性包含 URL,我应该使用 URL 编码。另一方面,我将这个 URL 插入到 HTML 中,所以它必须是 HTML 编码的。

请帮助我克服这个矛盾。

谢谢。


编辑:

这就是矛盾。假设 URL 中可能有 '<' 和 '>' 字符。URL 编码不会对它们进行转义,因此在 href 属性中会有保留的 HTML 字符,这违反了标准。HTML 编码会转义 '<' 和 '>' 字符,HTML 将有效,但之后 URL 中会出现意外的 '&' 字符(这是 URL 的保留字符,用作查询字符串参数的分隔符) .

保留的 URL 字符形成了保留的 HTML 字符的超集,除了为 HTML 保留但不为 URL 保留的“<”和“>”。


编辑2:

我对 '<' 和 '>' 字符是错误的,它们实际上是通过 URL 编码转义的。如果是这样,在这种情况下 URL 编码就足够了,不是吗?

4

1 回答 1

20

像往常一样构造一个 URL。遵循构建 URL 的规则。编码您放入其中的数据。

然后像往常一样构造 HTML。遵循构建 HTML 的规则。编码数据,因为你把它放进去。

即两者都做(但顺序正确)。

它们并不相互排斥,因此不存在矛盾。

例如(这是一个简化的示例,假设 $_GET 中的数据是正确的并且存在,不要在现实世界中这样做):

$search_term = $_GET['q'];
$page = $_GET['page'];
$next_page = $page + 1;
$next_page_url = 'http://example.com/search?q=' . urlencode($search_term) . '&page=' . urlencode($next_page);
$html = '<a href="' . htmlspecialchars($next_page_url) . '">link text</a>';
于 2012-04-17T10:30:40.917 回答