如何在HTML中编码href属性

时间:2012-04-17 10:28:54

标签: html urlencode html-encode

对href属性的内容应采取什么措施:HTML或URL编码?

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

一方面,由于href属性包含URL,我应该使用URL编码。 另一方面,我将此URL插入HTML,因此必须进行HTML编码。

请帮我克服这个矛盾。

感谢。


编辑:

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

Reserved URL characters形成reserved HTML characters的超集,除了'&lt;'和'&gt;'保留给HTML而不是URL。


编辑2:

我错了'&lt;'和'&gt;'它们实际上是由URL编码转义的百分比。如果是这样,在这种情况下,URL编码就足够了,不是吗?

1 个答案:

答案 0 :(得分:14)

正常构建网址。遵循构建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($page);
$html = '<a href="' . htmlspecialchars($next_page_url) . '">link text</a>';