【问题标题】:multi checkbox HTML to PHP多复选框 HTML 到 PHP
【发布时间】: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&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

什么可以解释这种差异?以及如何配置服务器以使其正常工作?

我希望我能学到一些我还不知道的东西......谢谢你们:)

尤里卡!

错误来自我的 .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,我也尝试过发布但仍然存在同样的问题。我一直以我的例子为例,因为这有助于我诊断出问题所在!

标签: php html .htaccess url


【解决方案1】:

可能是您为文档定义的字符编码。您已将其设置为 UTF-8,这是一种 2 字节编码。尝试其中一种拉丁字符集,例如ISO-8859-1,看看这是否是问题的根源。

【讨论】:

  • 不幸的是,将编码设置为 ISO 没有帮助!
【解决方案2】:
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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多