2011-04-25 53 views
8

我正在使用CodeIgniter在多語言網站上工作。有一種形式的數據發佈到控制器,但$_POST是空的,當我開始使用土耳其語的字符,如öçüÜĞ

我的字符集設置爲:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

形式:

<form action="translations/save" method="post" accept-charset="utf-8"> 
    <textarea rows="6" cols="60" id="editor_tr" name="editor_tr">Türkçe</textarea> 
</form> 

$_POST$this->input->post('editor_tr')返回空,但我可以看到file_get_contents("php://input")的原始帖子。

這個在正常的PHP測試中工作正常,但不適用於CodeIgniter。也許我的.htaccess文件導致了這個問題,但不知道。

任何幫助,非常感謝。

UPDATE: 下面是var_dump的輸出要求。

var_dump($_POST) - 如果沒有土耳其字符

array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(13) "turkish value" ["editor_en"]=> string(13) "english value" } 

var_dump($_POST) - 土耳其字符(輸入爲:Türkçe karakter,但它並沒有在彥博在$顯示)

array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(0) "" ["editor_en"]=> string(13) "english value" } 

更新2 : 調試時,我發現system.core.Input類清除_clean_input_data函數上的輸入數據。

// Clean UTF-8 if supported 
if (UTF8_ENABLED === TRUE) 
{ 
    $str = $this->uni->clean_string($str); 
} 

所以,以前$_POST已經達到我的控制器,該editor_tr值已經由system.core.Utf8類此功能清洗:

function clean_string($str) 
{ 
    if ($this->_is_ascii($str) === FALSE) 
    { 
     $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str); 
    } 

    return $str; 
} 
+0

你有沒有試過mbstring?和[codeigniter]的相關修復(http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/) – 2011-04-25 23:28:35

+0

'我的.htaccess文件可能是導致此問題,但不知道。考慮提供它呢? – Khez 2011-04-25 23:30:06

+0

@Madmartigan對不起,這是一個錯字。 – Ozay 2011-04-26 08:11:48

回答

6

由於評論堆積如山,可能會被忽視,我將發佈一些更多的建議。

讀者請記住,這是處理$ _POST數據值,而不是在網頁上顯示數據。

該用戶似乎有一個類似的問題:

Codeigniter seems to break $_POST of '£' character (Pound)

上有類似到位桶在這裏報告:

https://bitbucket.org/ellislab/codeigniter-reactor/issue/214/problem-when-inserting-special-characters 刪除鏈接:EllisLabs已關閉該回購向公衆發送

也許將此添加到您的index.php將有助於(很可能不是):

ini_set('default_charset', 'UTF-8');

仔細檢查,並確保您沒有運行任何驗證或在現場預備規則。像url_title()這樣的東西會去掉這些字符。

+1

您提供的第一個鏈接解決了問題。唷。沒想到MAMP和PHP會造成這種情況,但你永遠不知道。非常感謝! – Ozay 2011-04-27 09:13:30

+0

這是一個好消息,謝謝你的反應迅速,並及時提供相關細節。祝你的項目:) – 2011-04-27 09:16:08

+0

感謝Madmartigan,希望這可以幫助遇到同樣問題的其他人。 – Ozay 2011-04-27 09:27:35

-1

這心不是一個答案,但你可能要採取外觀和看到的一切是如何在即將到來。


foreach($_POST as $key => $val) 
{ 
    $post_data[$key] => $val; 
} 
print_r($post_data); 

然後嘗試與CI的帖子


foreach($_POST as $key => $val) 
{ 
    $post_data[$key] => $this->input->post($key); 
} 

print_r($post_data); 
6

確保表單標籤具有接收字符集:

<form method="post" action="" accept-charset="utf-8"> 

然後在控制器使用utf8_decode()獲取的公佈值時:

$value = utf8_decode($this->input->post('field_name')); 
+0

這應該是接受的解決方案,或者至少upvoted更多。由Ellislab提供的bitbucket解決方案(在@WesleyMurch答案中)不再可用,因爲Ellislab關閉了回購。 – Lvkz 2015-01-06 23:55:17