1

次のようなmysqlテーブルにアラビア語のキーワードがあります

    *#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() でチェックしましたが、運がありませんでした。

比較する前に両方の文字列を 1 つの共通形式に変換する必要があることはわかっていますが、どの形式を変換する必要がありますか?

これについて私を助けてください。

4

1 に答える 1

2

アラビア記号はマルチバイト文字を使用してエンコードされるため、このような制約をサポートする関数を使用する必要があります: grapheme_strposおよびmb_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);
}

最後になりましたが、文字列で使用されるエンコーディングとして、関数が取るさまざまな引数についてドキュメントを確認してください。

于 2013-02-18T11:34:20.623 に答える