Проверьте язык строки на основе глифов в PHP - PullRequest
4 голосов
/ 18 июня 2009

У меня есть база данных 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>";
    }
    ...
}

К счастью, класс не задыхается при вводе латинских символов, поэтому теоретически я мог бы посылать каждый результат через преобразование, но это кажется пустой тратой обработки.

Спасибо!

Edit: Я до сих пор не нашел способ проверить глифы или символы. Я полагаю, я мог бы поместить все арабские символы в массив и проверить, соответствует ли что-либо в массиве какой-либо части строки ...

Я, однако, нашел временное решение, которое в итоге могло бы работать нормально. Он переводит каждый заголовок через преобразование независимо от языка, но выводит транслитерацию в скобках только в том случае, если строка была изменена:

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>";
}

Ответы [ 2 ]

7 голосов
/ 20 июня 2009

Это должно сделать это:

preg_match("/\p{Arabic}/u", $item['item_title'])

Вы можете сделать это регулярное выражение более изощренным, если хотите, но я не думаю, что вам действительно нужно.

Экранирующая последовательность \p позволяет выбирать символы на основе их свойств Unicode (когда используется модификатор шаблона u ).

В руководстве по PHP указано: «Расширенные свойства, такие как« Greek »или« InMusicalSymbols », не поддерживаются PCRE». Но это уже не совсем так. В версии PCRE 6.5 добавлена ​​поддержка имен сценариев .

0 голосов
/ 18 июня 2009

Вот класс PHP с открытым исходным кодом для автоматического определения арабского набора символов:

http://www.ar -php.com / PHP / арабский / index.html # ArCharsetD

...