应该对href属性的内容做什么:HTML或URL编码?
<a href="???">link text</a>
一方面,由于href属性包含URL我应该使用URL编码.
另一方面,我将此URL插入HTML,因此必须进行HTML编码.
请帮我克服这个矛盾.
谢谢.
编辑:
这是矛盾.假设可能有’<'和'>‘ URL中的字符. URL编码不会转义它们,因此href属性中会有保留的HTML字符,这违反了标准. HTML编码将转义’<'和'>‘字符和HTML将有效,但在此之后会出现意外的’&’ URL中的字符(这是URL的保留字符,它用作查询字符串参数的分隔符).
Reserved URL characters形成reserved HTML characters的超集,除了’<'和'>‘保留给HTML但不保留URL.
编辑2:
我错了’<'和'>‘它们实际上是由URL编码转义的百分比.如果是这样,在这种情况下URL编码就足够了,不是吗?
解决方法
正常构造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($page); $html = '<a href="' . htmlspecialchars($next_page_url) . '">link text</a>';