如何在HTML中编码href属性

如何在HTML中编码href属性,html,urlencode,html-encode,Html,Urlencode,Html Encode,针对href属性的内容应该做什么:HTML或URL编码 <a href="???">link text</a> 一方面,由于href属性包含URL,我应该使用URL编码。 另一方面,我将这个URL插入HTML,所以它必须是HTML编码的 请帮我克服这个矛盾 谢谢 编辑: 矛盾就在这里。假设URL中可能有“”个字符。URL编码不会转义它们,因此href属性中会有保留的HTML字符,这违反了标准。HTML编码将转义“”字符,HTML将有效,但在此之后,URL中将出现意

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

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

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

请帮我克服这个矛盾

谢谢


编辑:

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

形成的超集,但为HTML保留但不为URL保留的“”除外


编辑2:


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

像平常一样构造URL。遵循构建URL的规则。对输入的数据进行编码

然后像平常一样构造HTML。遵循构造HTML的规则。在将数据放入时对其进行编码

i、 e.两者都做(但顺序正确)

它们不是相互排斥的,因此不存在矛盾

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

$search\u term=$\u GET['q'];
$page=$_GET['page'];
$next_page=$page+1;
$next\u page\u url='1http://example.com/search?q=' . urlencode($search\u term)。'&第='页。urlencode($next_page);
$html='';

到目前为止你试过什么吗?这个“你试过什么吗”的迷因越来越傻了。与浏览器错误恢复一样,数据编码的很大一部分是为了防止安全问题。如果你在尝试某件事,你怎么能说你做对了?假设您拥有的任何安全测试套件都有足够的覆盖率?这是一个关于基本技术的完全合理的问题。昆汀或多或少是对的,但问题仍然是,什么情况会相互矛盾?你能举个例子吗?你是否尝试了两种解决方案,它们都有效,还是都无效?是的,我尝试了两种方法并更新了问题。在我看来,HTML编码根本不适合这种情况。现在我想弄清楚这是真的。重新编辑:我不确定“HTML编码将转义”字符是什么意思,HTML将是有效的,但在此之后,URL中将出现意外的“&”字符“怎么会这样<代码>就是写
的简单方法谢谢,昆汀,我明白你的意思了。但有两件事我不太确定。1) 如果htmlspecialchars()真的编码了什么,会发生什么?如果是这样,则URL中会有“&”字符,这是不允许的。2) URL编码是否可能在其自身之后保留一些保留的HTML字符?我想不是。不会有
&在URL内。将会有
&在HTML中。HTML将被解析,字符
&
将出现在DOM中。如果将属性的HTML源复制/粘贴到浏览器中,则该属性将中断,但不应这样做。如果您将URL存储在一个文本文件中,并将其压缩,然后将压缩文件的二进制内容复制/粘贴到地址栏,它也会中断。我记不起URL中编码/未编码的字符列表。当然,URL可以包含字符(例如
&
),这些字符在HTML中确实具有特殊含义(如果您希望它们在URL中具有特殊含义,则不应使用URL编码,如我给出的示例所示)。
$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>';