2011-02-04 81 views
5

在我的網站上有一個簡單的textarea表單供人發表評論。問題是,有時我會在uft8中收到信息,有時會在iso中收到信息。有沒有可能控制這個?php表單提交utf8?

也許我做錯了什麼,但有可能瀏覽器改變它發送的數據的編碼?

感謝

+0

可能重複[你怎麼知道什麼編碼,用戶輸入查詢是在瀏覽器?(HTTP://計算器.com/questions/4559564/how-do-you-know-what-encoding-the-user-is-input-into-the-browser) – 2011-02-04 19:28:41

回答

16

如果你想確保的是什麼字符集您接受,將其設置在窗體

<form method="post" action="/your/url/" accept-charset="UTF-8"> 
</form> 

你可以看到所有的可接受的字符集在這裏:Character Sets

+0

喜歡這個,但是它真的沒有在IE上工作? – 2011-02-04 20:21:24

+1

我認爲這是相反的,不起作用。如果我沒有記錯,IE會尊重UTF-8,但是如果你把你的字符集設置爲ISO,它將會失敗。這隻能算在新版本中。您也可以將頁面的字符集設置爲ayush,以確保一致。 – 2011-02-04 20:25:28

3

你總是可以強制UTF-8。然後,您可以發送,接收和存儲UTF-8廣告涵蓋大多數人類語言的數據,而無需更改字符集。

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

謝謝,我也會添加這個,但是...它是utf-81還是utf-8? – 2011-02-04 20:22:25

+0

這是utf-8。沒有一個utf-81。 – Michael 2017-02-06 18:25:31

-1

如果問題出現在所有/其中一些或只有IE瀏覽器上,您是否有多個不同瀏覽器的測試?

-3

您可以使用PHP的utf8_encode函數將$ _POST數據編碼爲UTF-8。

喜歡的東西:

$_POST['comments'] = utf8_encode($_POST['comments']); 
0

但是......編碼前檢查,如果字符串已經是UTF8 否則你進行雙重編碼它

function str_to_utf8 ($string) { 

    if (mb_detect_encoding($string, 'UTF-8', true) === false) { 
     $string = utf8_encode($string); 
    } 

    return $str; 
} 

或使用

$string = utf8_encode(utf8_decode($string)); 

所以你不要雙重編碼一個字符串

0

我改變中的mbstring.http_input解決了這個問題=通過在我的php.ini文件的