2012-10-24 38 views
1

我想將字符串轉換爲數字,使用帶有鍵的數組作爲查找表。PHP:包含特殊字符的數組鍵未找到

這是數組:

$q2_10_lt = array("Full-time worker" => 1 
       , "Part-time worker" => 2 
       , "Unemployed, would like to work" => 3 
       , "Unable to work (chronically ill/mentally handicapped/physically handicapped)" => 4 
       , "Pensioner/retired" => 5 
       , "Housewife/husband" => 6 
       , "Student at university of college (post-matric)" => 7 
       , "High school learner" => 8 
       , "Primary school learner" => 9 
       , "Child attending pre-school/nursery school/crèche/day-mother" => 10 
       , "Child staying at home" => 11 
       , "Other" => 12); 

該問題的關鍵是「上學前/幼兒園/託兒所/天,母子」。使用下面的代碼時,該鍵沒有找到:

$person_tempArr[] = $q2_10_lt[$row["q2_10"]] != null ? $q2_10_lt[$row["q2_10"]] : "12"; 
$person_tempArr[] = $q2_10_lt[$row["q2_10"]] == null ? $row["q2_10"] : ""; 

$row["q2_10"]值是剛剛從MySQL數據庫所採取的不同的字符串。

我應該從第一行中得到數字10,但是我得到12和完整的字符串不變「兒童就讀幼兒園/託兒所/託兒所/日母親」。

這必須與特殊字符è有關,但我一直無法解決它。請任何幫助。

編輯1

做一個十六進制轉儲的建議後,我得到了以下結果

從SQL DB:

43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 e8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72 

從字符串在PHP中:

43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 c3 a8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72 

區別在於「E8」與「C3A8」或「 è「從數據庫與」è「從PHP字符串。

那麼我怎麼能確保PHP字符串仍然是「è」?

回答

3

從數據庫層獲得的字符串與用作鍵的字符串不同。要修復它,每次使用相同的字符串。

這裏的意思是說,字符串是一個字節一個字節。做一個hexdump of the string你從數據庫中獲得。

然後輸入二進制字符串作爲鍵(或至少爲特殊字母)。這將使您的代碼更加健壯,因爲無論您在哪種編碼中保存PHP文件,它都可以工作。

編輯:當你比較對數據庫,關鍵需要共同與在數據庫中的二進制序列:

 , "Child attending pre-school/nursery school/cr\xE8che/day-mother" => 10 
                 ^^^^ 

使用十六進制表示法來表達你是不是字節能夠與您的UTF-8編碼的PHP文件「打字」。該數據庫使用一些或類似的編碼。

正如你可以看到它只是\x,然後十六進制代碼E8。它在PHP中使用雙引號字符串。

0

我最終將我的表列編碼更改爲utf8_general_ci,表格整理爲utf8_general_ci。我還添加以下代碼行到我的PHP文件:

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

//set encodig to utf-8 
mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET 'utf8'"); 

它現在的工作,但我可以做的東西不建議?

+0

如果您的網站以UTF-8編碼運行,您的數據庫應該支持它。檢查列定義是否採用UTF-8編碼的數據,否則可能會看到一些數據丟失。用於網絡應用程序的UTF-8不是一個不錯的選擇。注意MySQL支持UTF-8的方式不同:http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html – hakre