У меня есть база данных 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 упоминается: «Расширенные свойства, такие как« греческий »или« InMusicalSymbols », не поддерживаются PCRE». Но это не совсем так. В выпуске PCRE 6.5 добавлена поддержка имен скриптов .
Вот класс с открытым исходным кодом PHP для автоматического обнаружения арабского набора символов: