【发布时间】:2014-10-25 23:41:58
【问题描述】:
在将多复选框值从 HTML 传递到 PHP 时,我遇到了一个奇怪的问题。
这里是 test.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
什么可以解释这种差异?以及如何配置服务器以使其正常工作?
我希望我能学到一些我还不知道的东西......谢谢你们:)
尤里卡!
错误来自我的 .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]
如果我评论最后两行,代码就可以工作。感谢this article 的最后一个帖子,我弄明白了。看来刹车 [] 被重写并将 %255B%255D 转换为 %5B%5D。因此,如果有人能够提出解决方案,我仍在倾听...
【问题讨论】:
-
你为什么用get?你应该改用 post...
-
您是否将文件的编码设置为 UTF-8?
-
是的,我将文件编码设置为 UTF-8,我也尝试过发布但仍然存在同样的问题。我一直以我的例子为例,因为这有助于我诊断出问题所在!