我在将多复选框值从HTML传递到PHP时遇到了一个奇怪的问题。
这是测试.php:
<!DOCTYPE html>
<html lang="fr">
<meta charset="utf-8">
<head>
<title>Test Multi CheckBox</title>
</head>
<body>
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
foreach($_GET['currency'] as $currency)
{
echo $currency."<br/>";
}
?>
<form class="form-horizontal" role="form" name="form_individu" action="http://my-site.com/test.php" method="get">
<input type="checkbox" name="currency[]" value="usd"/>USD
<input type="checkbox" name="currency[]" value="euro"/>EURO
<input type="checkbox" name="currency[]" value="cad"/>CAD
<button type="submit" class="btn btn-primary">Modifier</button>
</form>
</body>
</html>
在我的生产服务器上测试这个功能会得到以下URL:
test.php?currency%255B%255D=usd¤cy%255B%255D=euro
我无法在PHP中输出货币值,原因是:
Warning: Invalid argument supplied for foreach() in test.php on line 14
但在localhost上,URL变为:
test.php?currency%5B%5D=usd¤cy%5B%5D=euro
PHP可以正确输出货币值!
所以唯一的区别是货币的URL编码[]:
-> currency%255B%255D on server
-> currency%5B%5D on localhost
什么可以解释这种差异?以及如何配置服务器以使其正常工作?
我希望我能学到一些我还不知道的东西。。。谢谢你们:)
EUREKA
错误来自我的.htaccess:
SetEnv PHP_VER 5
SetEnv REGISTER_GLOBALS 0
# URL rewriting module activation
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
#Redirection http:// vers http://www pour éviter le duplicate content
# LOCAL
RewriteCond %{HTTP_HOST} ^my-domain.com$
RewriteRule ^(.*) http://www.my-domain.com/$1 [QSA,L,R=301]
若我评论最后两行,那个么代码就工作了。多亏了这篇文章的最后一篇文章,我才明白了这一点。制动器[]似乎被重写,并将%255B%255D转换为%5B%5D。所以,如果有人能够提出解决方案,我仍在倾听。。。
也许是您为文档定义的字符编码。您将其设置为UTF-8,这是一种2字节的编码。尝试其中一个LATIN字符集,如ISO-8859-1
,看看这是否是问题的根源。
Try the following code. It is working fine.
<!DOCTYPE html>
<html lang="fr">
<meta charset="utf-8">
<head>
<title>Test Multi CheckBox</title>
</head>
<body>
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
foreach($_POST['currency'] as $currency)
{
echo $currency."<br/>";
}
?>
<form class="form-horizontal" role="form" name="form_individu" action="/test.php" method="post">
<input type="checkbox" name="currency[]" value="usd" />USD
<input type="checkbox" name="currency[]" value="euro"/>EURO
<input type="checkbox" name="currency[]" value="cad"/>CAD
<button type="submit" class="btn btn-primary">Modifier</button>
</form>
</body>
</html>