多复选框HTML到PHP


multi checkbox HTML to PHP

我在将多复选框值从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&currency%255B%255D=euro

我无法在PHP中输出货币值,原因是:

Warning: Invalid argument supplied for foreach() in test.php on line 14

但在localhost上,URL变为:

test.php?currency%5B%5D=usd&currency%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>