2013-04-18 27 views
4

用户在文本输入中向我的网站提供正确转义的URL和原始URL;比如我考虑这两个URL相当于:在我的网站中呈现网址时,如何避免双重网址编码?

​​

现在我想使这些作为<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属性进行编码之间存在分歧。

+0

你当然可以使用服务器端脚本来检查的地方张贴的URL是否是编码或者不,然后如果需要的话进行编码。 – jtheman

回答

10

如果你想避免双重编码的链接,你可以只用urldecode()两个链接,然后urlencode()之后,作为一个URL解码,例如“https://www.cool.com/cool豆”将返回相同的值,而解码“https://www.cool.com/cool%20beans”将返回与空间。这使得两个链接都可以被正确编码。

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

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

理想为这个共同的编码字符数组将被扫描,在的“%20”

+0

这似乎应该工作,谢谢你的答案。我会在可以接受的延迟后接受。 –