PHPのグリフに基づいて文字列の言語を確認する
質問
英語とアラビア語の両方の書籍名を持つMySQLデータベースがあり、 PHPクラス。アラビア語のテキストを自動的にラテン文字に音訳できます。
出力HTMLを次のようにしたい:
<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>
PHPで使用されているUnicode文字とグリフに基づいて文字列の言語を決定する方法はありますか?次のようなものを取得しようとしています:
$Ar = new Arabic('EnTransliteration');
while ($item = mysql_fetch_array($results)) {
...
if (some test to see if $item['item_title'] has Arabic glyphs in it) {
echo "<h3>$item[item_title] <em>(" . $Ar->ar2en($item['item_title']) . ")</em></h3>";
} else {
echo "<h3>$item[item_title]</h3>";
}
...
}
幸いなことに、ラテン文字を入力してもクラスは窒息しないので、理論的にはすべての結果を変換で送信できましたが、それは処理の無駄のようです。
ありがとう!
編集: グリフや文字を確認する方法がまだ見つかりません。すべてのアラビア文字を配列に入れ、配列内の何かが文字列の一部と一致するかどうかを確認できると思います...
しかし、最終的にはうまくいくかもしれない暫定的な解決策を見つけました。言語に関係なくすべてのタイトルを変換しますが、文字列が変更された場合にのみ括弧付きの音訳を出力します。
while ($item = mysql_fetch_array($mysql_results)) {
$transliterate = trim(strtolower($Ar->ar2en($item['item_title'])));
$item_title = (strtolower($item['item_title']) == $transliterate) ? $item['item_title'] : $item['item_title'] . " <em>($transliterate)</em>";
echo "<h3>$item_title</h3>";
}
解決
これでうまくいくはずです:
preg_match("/\p{Arabic}/u", $item['item_title'])
必要に応じて、その正規表現をもう少し洗練させることもできますが、実際には必要ないと思います。
\ p
エスケープシーケンスを使用すると、Unicodeプロパティに基づいて文字を選択できます( u
パターン修飾子が使用されます。)
PHPマニュアルには、「&quot; Greek&quot;」などの拡張プロパティが記載されています。または&quot; InMusicalSymbols&quot; PCREではサポートされていません。」しかし、それはもう完全に真実ではありません。 PCREリリース6.5では、スクリプト名のサポートが追加されました。
他のヒント
アラビア文字セット自動検出用のPHPオープンソースクラスを次に示します。