2012-02-23 31 views
3

我正在寫一個小型的網絡應用程序,將接收和解析用戶的製表符分隔的文本文件。這些文件將通過textareamultipart/form-data表單上傳。這些文件將以各種形式出現,包括亞洲等。因此,我試圖在整個應用程序中使用utf-8。完整的UTF-8符合PHP Web應用程序?

該網站是完全(據我所知)是UTF-8:

  • 每個PHP文件被保存在UTF-8編碼;
  • 我在php.ini文件中添加了default_charset = "utf-8";
  • HTML標頭包含所需UTF-8提及:

    header('Content-Type:text/html; charset=UTF-8'); 
    ... 
    <?xml version="1.0" encoding="utf-8" ?> 
    ... 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    
  • textarea的形式包含accept-charset="UTF-8"標籤。

  • db在utf-8中整理;
  • 到db的每個連接都包含選項1002 => 'SET NAMES utf8'。現在

,我才發現,原來我需要設置mb_regex_encoding爲UTF-8爲我解析函數的工作(我用mb_split()識別&更換標籤和新線)之一,手動。所以...

我還需要做些什麼來確保我的網站始終是一勞永逸的UTF-8?特別是,有沒有其他編碼功能,我應該設置,如mb_internal_encoding(),如果是這樣的代碼應該這樣做(例如,在index.php文件的開始?

+1

你看到http://stackoverflow.com/questions/1317152 – Vitamin 2012-02-23 22:12:55

+1

@Vague - 是的,它既不提及'mb_regex_encoding'也不'mb_internal_encoding'。 – JDelage 2012-02-23 22:14:58

+0

@JDelage:PCRE函數也可以使用UTF-8,僅供參考。不要使用'SET NAMES utf8',請看這裏:http://php.net/manual/en/mysqli.set-charset.php – hakre 2012-02-23 22:24:49

回答

1

我可以想到兩件事情;

mb_internal_encoding('UTF-8'); 

...儘早在PHP腳本,

mysqli_set_charset($link, 'utf8'); 

...設置連接字符集,如果你使用MySQL的PDO,你可以指定。它與connection string

"mysql:host=$host;dbname=$db;charset=utf8" 
+0

Reg。 'mb_internal_encoding()',我應該在'session_start()'之前還是之後這樣做? – JDelage 2012-02-23 22:24:29

+0

@JDelage:如果你不使用在反序列化時使用'mb _..''函數的序列化對象,'mb _...'與'session_start'不相關。 – hakre 2012-02-23 22:28:23

+0

在嘗試操作任何多字節字符串之前,您應該設置多字節字符串操作函數**的內部編碼。我不認爲session_start()意味着任何字符串操作,所以我不會用它作爲遊標。 – jgivoni 2012-02-23 22:29:03