PHP - urlencoded() 符号在 url 中被视为实际符号
PHP - urlencoded() ampersand in url perceived as actual ampersand
有一个虚拟示例 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
这很好,但是如果我们访问 link,脚本将 return:
Array
(
[P] => One
[Two] =>
)
这显然是错误的。
在实际应用中,在 url 中提交了大约 30 个字符长的字母数字字符串,其中包含特殊字母(瑞典语)。
编辑:在我的实际应用程序中,我使用 URL rewrite:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [L,QSA]
</IfModule>
会不会是这个原因? - 确认的。这是问题所在。请参阅下面我的回答。
你可以关注 this.if 你的数组就是这样
$data = array('p'=>'one',
'q'=>'two');
你可以像这样构建 url
echo http_build_query($data)
它会给出这样的输出
p=one&q=two
您需要使用 %
来转义符号来发送您的 URL。
像这样尝试 '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>");
?>
我发现了问题。问题是 PHP 权力的布局。
URL 重写有问题:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [L,QSA]
</IfModule>
新的工作版本:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [B,L,QSA]
</IfModule>
参考:data being stripped off after ampersand in URL even when using urlencode
有一个虚拟示例 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
这很好,但是如果我们访问 link,脚本将 return:
Array
(
[P] => One
[Two] =>
)
这显然是错误的。
在实际应用中,在 url 中提交了大约 30 个字符长的字母数字字符串,其中包含特殊字母(瑞典语)。
编辑:在我的实际应用程序中,我使用 URL rewrite:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [L,QSA]
</IfModule>
会不会是这个原因? - 确认的。这是问题所在。请参阅下面我的回答。
你可以关注 this.if 你的数组就是这样
$data = array('p'=>'one',
'q'=>'two');
你可以像这样构建 url
echo http_build_query($data)
它会给出这样的输出
p=one&q=two
您需要使用 %
来转义符号来发送您的 URL。
像这样尝试 '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>");
?>
我发现了问题。问题是 PHP 权力的布局。
URL 重写有问题:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [L,QSA]
</IfModule>
新的工作版本:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s= [B,L,QSA]
</IfModule>
参考:data being stripped off after ampersand in URL even when using urlencode