2013-02-18 55 views
1

我有一個MySQL表像PHP阿拉伯文字比較使用strpos

*#1591; *#1610; *#1585;*#1575;*#1606 

一個阿拉伯語關鍵詞//請考慮在*的地方&,價值與「&」自動轉換到阿拉伯語。

MySQL表編碼:utf8_general_ci

我正在從外部資源例如Twitter的一些字符串。

我想匹配關鍵字與我得到的推文。

$tweet = 'وينج وأداسي الاماراتية توقعان اتفاقية تعاون لتوفير أنظمة الطائرات بدون طيا'; 

    $keyword = '*#1591; *#1610; *#1585;*#1575;*#1606'; //From db 

    $status = strpos ($tweet, $keyword) 

$ status始終返回false。

我檢查了utf8_encode(),utf_8_decode(),mb_strpos()沒有任何運氣。

我知道在比較之前需要將兩個字符串轉換爲一種通用格式,但我需要轉換哪種格式?

請幫我解決這個問題。

回答

2

由於阿拉伯文符號是使用多字節字符編碼的,所以您必須使用支持這種約束的函數:grapheme_strposmb_strpos(按此順序)。

使用它們而不是普通的舊strpos會做到這一點。

另外,請記住,您可能需要檢查在其使用之前它的可用性,因爲不是所有的託管環境讓他們啓用:

if (function_exists('grapheme_strpos')) { 
    $pos = grapheme_strpos($tweet, $keyword); 
} elseif (function_exists('mb_strpos')) { 
    $pos = mb_strpos($tweet, $keyword); 
} else { 
    $pos = strpos($tweet, $keyword); 
} 

最後但並非最不重要的,請檢查的文檔函數採用的不同參數作爲字符串使用的編碼。

+0

謝謝。如何使用mb_strpos('原始阿拉伯文字','utf8編碼關鍵字')。這兩個字符串都是不同的格式。 – Samy 2013-02-18 11:37:45

+0

需要在比較之前將'阿拉伯文原文'轉換爲utf8嗎?因爲我也嘗試過使用mb_strpos。它沒有給出所需的輸出。 – Samy 2013-02-18 11:43:36

+0

原始的阿拉伯文字很好。不過您可能需要轉換html實體:'$ keyword = html_entity_decode($ keyword);'(假設用星號替換星號)。 – 2013-02-18 11:45:53