有一个虚拟示例PHP应用程序,它显示了导致我出现问题的原因。
<?PHP
echo ((isset($_GET['P'])) ? print_r($_GET) : "<a href='http://example.com/a.php?P=" . urlencode('One & Two') . "'>One & Two</a>");
?>
如果我们访问没有P参数页面的页面将输出:
http://example.com/One+%26+Two
这没关系,但是如果我们访问该链接,脚本将返回:
Array
(
[P] => One
[Two] =>
)
这显然是错的。
在实际应用中,在url中提交了大约30个字符长的字母数字字符串,其中包含特殊字母(瑞典语)。
编辑:在我的真实应用程序中,我使用URL重写:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s=$1 [L,QSA]
</IfModule>
这可能是原因吗? - 确认。这是问题所在。请参阅下面的答案。
答案 0 :(得分:1)
您需要使用%
发送您的网址以逃避&符号。
试试这个'One %26 Two'
<?PHP
echo ((isset($_GET['P'])) ? print_r($_GET) : "<a href='http://example.com/a.php?P=One %26 Two'>One & Two</a>");
?>
答案 1 :(得分:0)
你可以关注这个。如果你的数组就是那样
$data = array('p'=>'one',
'q'=>'two');
你可以像这样建立网址
echo http_build_query($data)
它将提供这样的输出
p=one&q=two
答案 2 :(得分:0)
我发现了问题。问题在于PHP的权力。
这是URL重写的问题:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s=$1 [L,QSA]
</IfModule>
新的工作版本:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s=$1 [B,L,QSA]
</IfModule>
参考:data being stripped off after ampersand in URL even when using urlencode