Вопрос

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

Я бы хотел, чтобы мой выходной HTML-код выглядел примерно так:

<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>

Есть ли способ для PHP определить язык строки на основе символов Юникода и глифов, используемых в ней?Я пытаюсь получить что-то вроде этого:

$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 экранирующая последовательность позволяет выбирать символы на основе их свойств в Юникоде (когда u модификатор шаблона используется).

В руководстве по PHP упоминается:"Расширенные свойства, такие как "греческий" или "InMusicalSymbols", не поддерживаются PCRE". Но это уже не совсем так. В PCRE версии 6.5 добавлена поддержка имен скриптов.

Другие советы

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

http://www.ar-php.com/php/arabic/index.html#ArCharsetD

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top