我在將多個複選框值從HTML傳遞到PHP時出現了一個奇怪的問題。複選框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>
測試我的生產服務器上的此功能使我有以下網址:
test.php?currency%255B%255D=usd¤cy%255B%255D=euro
,我不能輸出在PHP中,由於貨幣價值到:
Warning: Invalid argument supplied for foreach() in test.php on line 14
但在本地主機上,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]
如果我評論最後兩行,代碼工作。我想出了this article的最後一篇文章。看起來brakets []被重寫並將%255B%255D轉換爲%5B%5D。因此,如果有人能夠提供解決方案,我仍然在聽...
你爲什麼用get?你應該使用帖子來代替... – SolidSnake 2014-09-01 18:22:50
你是否將編碼設置爲文件的UTF-8? – 2014-09-01 18:25:24
是的我把文件編碼設置爲UTF-8,我也試過後,但仍然是同樣的問題。我始終堅持我的榜樣,因爲這幫助我診斷出問題所在! – hugsbrugs 2014-09-01 20:19:10