12

用户在文本输入中向我的网站提供正确转义的 URL 和原始 URL;例如,我认为这两个 URL 等效:

https://www.cool.com/cool%20beans
https://www.cool.com/cool beans

现在我想<a>稍后在查看这些数据时将它们呈现为标签。我在编码给定文本和获取这些链接之间陷入困境:

<a href="https://www.cool.com/cool%2520beans">   <!-- This one is broken! -->
<a href="https://www.cool.com/cool%20beans">

或者不对其进行编码并得到这个:

<a href="https://www.cool.com/cool%20beans">
<a href="https://www.cool.com/cool beans">       <!-- This one is broken! -->

从现代浏览器的用户体验角度来看,最好的出路是什么?我在对他们的输入进行解码传递,或者我上面列出的第二个选项,我们不编码href属性之间感到纠结。

4

1 回答 1

18

如果您想避免对链接进行双重编码,您可以urldecode()在两个链接上使用,然后urlencode()在解码诸如“ https://www.cool.com/cool beans”之类的 URL 时将返回相同的值,而解码“ https://www.cool.com/cool%20beans “将返回空间。这使两个链接都可以自由正确编码。

或者,可以使用strpos()函数扫描编码字符,例如

if ($pos = strpos($url, "%20") {
    //Encoded character found
}

理想情况下,将扫描一组常见的编码字符,以代替“%20”

于 2013-04-18T22:54:46.490 回答