我在數組從數據庫中字符串比較字符串列表:PHP字符串比較古怪
if (in_array($entry, array('Söme string', 'other-string')))
這適用於other-string
,而不是Söme string
,主要區別beeing這個字符串有一個變音符號和一個html實體。如果數據庫中的$entry
爲Söme string
,則比較失敗,即使它應該是相同的字符串。
我也試過strcmp
和直接比較使用===
和==
,但比較始終是負面的。在比較之前,我也嘗試過utf8_encode
,但那沒做什麼。
數據庫使用UTF-8,我使用Drupal API函數獲取數據,我的php文件也是UTF-8編碼。如果我將$entry
和Söme string
打印到輸出HTML,它們是無法區分的。
任何想法可能導致此行爲?
更新
感謝您的幫助。看起來
在途中被轉換,並且在數據庫中被存儲爲真正的非破壞性空間,而不是HTML實體。打印它將其轉換回HTML實體(或者,當我看着它時Firebug可以做到這一點)。
的var_dump的輸出()(使用打印功能,從得到的HTML源採取):
$entry: string(14) "Söme string"
"Söme string": string(18) "Söme string"
(I已經編輯的字符串作爲真鈔包含姓名)
更新2
我「已經改變了字符串"Some string"
和這裏的的
var_dump(bin2hex($entry));
var_dump(bin2hex('Some string'));
$entry: string(24) "536f6d65c2a0737472696e67"
"Some string": string(32) "536f6d65266e6273703b737472696e67"
連接有什麼編碼? – Gumbo 2010-09-08 08:29:23
PHP文件有什麼編碼? (定義硬編碼字符串的那個),或者用於比較的任何源。 – AlexanderMP 2010-09-08 08:32:18
@Gumbo Drupal在任何地方都使用UTF-8,所以我很確定連接也使用UTF-8 – 2010-09-08 08:34:21