2012-10-25 165 views
0
正確的字符串比較

可能重複:
PHP : Array key containing special character not foundPHP:有特殊字符

我比較字符串,以確定字符串對應的數字。一組字符串存儲在MySQL數據庫中,另一組字符串存儲爲php中數組的鍵。

當試圖查找下面的字符串時,它在數組中找不到。 「兒童參加學前教育/幼兒園/託兒所/天娘」的代碼

更多信息這previous question,導致我下面的測試是可用的。

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

從MySQL數據庫:

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」與MySQL數據庫中的「C3A8」或「è」相比,PHP字符串中的「Ã」。

那麼我該如何去確保硬編碼的php數組關鍵字符仍然是「è」?

+0

PHP文件保存爲UTF-8,但您的數據庫正在使用Latin1/ISO-8859-1 – Esailija

+0

爲什麼您重複相同的問題?我沒有看到任何區別,所以我不確定爲什麼一個新的問題被認爲是必要的。 – Nanne

+0

在知識獲得後,我將它看作是我之前問題的延伸。 – Rynardt

回答

1

您應該在PHP和MySQL中使用相同的enconding。

如果你的PHP字符串是UTF-8編碼,你的表charset必須utf8collationutf8_general_ciutf8_unicode_ci。另外,你必須告訴MySQL你也需要用UTF-8查詢結果。這裏有三種方式來實現這一目標:

  1. 查詢的連接:執行SET NAMES utf8剛過連接到MySQL。
  2. 使用PDO:$pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');這與上述基本相同,但由PDO自動執行。
  3. 永久(my.cnf):這將爲所有連接設置UTF-8隱式。只需將:init-connect='SET NAMES utf8'添加到MySQL的配置文件my.cnf即可。

我personaly使用第三個選項,但在共享的環境中,我會選擇第二個。

+0

需要注意的是:如果您的上帝禁止使用較舊的MySQL擴展,請始終使用適當的API,例如'mysql_set_charset'。不要運行「SET NAMES」查詢。 – deceze