2011-03-31 57 views
6

所以我想编码/解码一个url,解码时会返回编码的+符号从teh url。例如,我编码website.com/index.php?eq=1+12,在编码时将+转换为%2B,因为它应该如此。当我检索$_REQUEST['eq']的值并使用urldecode()时,它的回显为"1 12"。可以这么说,我似乎无法获得解码来恢复+。我在这里做错了什么,或者有没有更好的方式去做这件事?这里是我使用的确切的编码/解码线。php URL解码从URL得到'+'

提交页面

<?php 
$eq = "1+12"; 
$send = '<a href="website.com/index.php?eq='.urlencode($eq).'</a>'; 
echo $send; 

检索

<?php 
$eq = urldecode($_REQUEST['eq']); 
echo $eq; 
?> 

回答

11

不要运行urldecode,在$_REQUEST数据被自动解码为您服务。

URL中的加号是一个编码空间。 PHP自动将十六进制值解码为+。然后,通过运行结果urldecode,手动(并错误地)将+解码为

+0

所以我删除了urldecode,并保存urlencode。它仍然将$ _REQUEST注册为空间。 – 2011-03-31 06:19:28

+0

它不会在我复制/粘贴该代码并删除'urldecode'语句。 – Quentin 2011-03-31 06:21:46

+0

我不确定,也许PHP版本不同,功能不同?或者可能是我的网页的其他部分发生冲突。我想通过使用str_replace(“”,“+”,$ eq)来解决这个问题。可能不理想,但因为我的URL永远不会需要空间,似乎工作。感谢您的帮助。 – 2011-03-31 06:25:39

9

尝试使用,而不是urldecode()

1

功能rawurldecode()我编码它在JavaScript与encodeURIComponent()并在PHP与rawurldecode()解码和它编码/正常解码对我来说,包括“+”,但urldecode()