2012-03-15 87 views
2

據我的消息來源誰講西班牙語,如果我尋找包含這兩個值中的字符串列表模式「鍋」:如何獲得PHP中的strpos以匹配外語字符?

$normalString = "abcpan123"; 
$specialString = "abcpañ123"; 

它應該與他們兩個 - 例如strpos("pan", $normalString)strpos("pan", $specialString)都應返回'3'。

但是,只有第一個返回非假值。

如果我做MySQL中的類似搜索「,如‘%泛%’這兩個字符串匹配。

想必這種情況不僅適用於正波浪線,但與口音等改性其他字符好吧

我對如何處理這個問題感到困惑...似乎是別人必須遇到和解決的問題,但我還沒有找到一個好的現有解決方案。 PHP或某種配置,但沒有喜悅

當然,我可以用正則表達式編寫一些自定義代碼代替使用strpos(),但 我甚至不知道如何確定多種外語中哪些字符將被視爲等效。

對我有幫助嗎?

回答

0

strpos比較字符,「n」不是「ñ」。實際上它只是比較字節,它甚至不會意識到不同的編碼。如果你想知道比較的語言環境和整理,請使用strcoll。閱讀評論,沒有那麼多關於它的文檔。

該數據庫包括一個排序規則設置框,這使得它執行這樣的模糊搜索。

另一種方法是將所有字符串歸一化爲純ASCII字符,然後再使用iconv('UTF-8', 'ASCII//TRANSLIT', $string)進行比較。

+0

iconv()調用在php命令行腳本中非常適合我,但在我通過apache運行php時看起來沒有做正確的事情。任何想法爲什麼? – tristan 2012-03-15 20:51:50

相關問題