2011-10-22 71 views
2

我有一個CodeIgniter過濾掉包含帶重音字符的POST變量的問題。CodeIgniter POST變量

這裏是我的HTML頁面:

<!DOCTYPE html> 
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head> 
<body>  
    <form action="/test" method="post" accept-charset="utf-8"> 
     <input type="text" name="name" value="" /> 
     <input type="submit" name="submit" value="Submit" />  
<form>  
</body> 
</html> 

這裏是我的「/測試」的CodeIgniter控制器的索引功能:

public function index { 
    echo '<pre>'; 
    print_r($_POST); 
    die(); 
} 

......隨着名稱爲「我的名字」我進入得到這樣的:

Array 
(
    [name] => my name 
    [submit] => Submit 
) 

...但隨着輸入爲「我的名字」的名稱,變量被傳遞爲空:

Array 
(
    [name] => 
    [submit] => Submit 
) 

如果我將相同的表單發佈到獨立的PHP腳本,它可以正常工作。我看不到任何明顯的配置導致這一點。誰能幫忙?

+0

Di你檢查這個問題嗎?http://stackoverflow.com/questions/5784207/post-empty-on-utf-8-characters –

+1

除此之外,根據:http://codeigniter.com/user_guide/libraries/input .html 「」「 安全篩選功能在調用新控制器時自動調用。它過濾POST/COOKIE數組鍵,僅允許字母數字(和其他幾個字符)。「」「」 - 那麼如何更改它? – Ade

+1

好的......感謝鏈接@ Kobayakawa這個問題與運行PHP 5.3.MAMP的MAMP隔離,運行PHP 5.3.8的CentOS/Apache web服務器上沒有這樣的問題 將MAMP切換到PHP 5.2可以修復它(但不是很好,因爲我'在生產中運行5.3) – Ade

回答

2

在config.php,更改此 -

/* 
|-------------------------------------------------------------------------- 
| Default Character Set 
|-------------------------------------------------------------------------- 
| 
| This determines which character set is used by default in various methods 
| that require a character set to be provided. 
| 
| See http://php.net/htmlspecialchars for a list of supported charsets. 
| 
*/ 
$config['charset'] = 'UTF-8'; 

別的東西......基本上會發生什麼情況是,如果它被設置爲UTF-8 CI在默認情況下,通過一個過濾器運行一切檢查/轉換,如果應用程序是期待UTF-8,並執行iconv()是罪魁禍首......看到這個線程的更多信息https://github.com/EllisLab/CodeIgniter/issues/261