Как конвертировать арабские символы в Unicode, используя PHP - PullRequest
10 голосов
/ 30 мая 2011

Я хочу знать, как я могу преобразовать слово в юникод, например: http://www.arabunic.free.fr/

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

спасибо

Редактировать

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

http://en.wikipedia.org/wiki/Arabic_alphabet#Table_of_basic_letters

один и тот же символ в другой позиции:

ب | |ب | ـبـ | ب

Я думаю, что это должен быть способ конвертировать каждый арабский символ в его эквивалентное число, но как?

Редактировать

Я все еще верю, что есть способ преобразовать каждый символ в его форму в зависимости от позиций

любая идея приветствуется ..

Ответы [ 5 ]

12 голосов
/ 02 июня 2011

Все, что вам нужно, это функция с именем: utf8Glyphs, которую вы можете найти в ArGlyphs.class.php, скачайте ее с ar-php и посетите Ar-PHP для ArPHP далееинформация о проекте и классах.

Будет выполнено обратное преобразование слова с одинаковыми его символами (глифами).

Пример использования:

    <?php
    include('Arabic.php');
    $Arabic = new Arabic('ArGlyphs');

    $text = 'بسم الله الرحمن الرحيم';
    $text = $Arabic->utf8Glyphs($text);
    echo $text;
    ?>
2 голосов
/ 01 июня 2011

Просто установите для элемента, содержащего арабский текст, значение «rtl» (справа налево), затем введите правильно написанный арабский язык, и текст будет отображаться со всеми искомыми лигатурами.

div {direction: rtl;}

Не забудьте прочитать «Абсолютный минимум, который должен знать каждый разработчик программного обеспечения, абсолютно и точно должен знать о Юникоде и наборах символов (без извинений!)»

Подумайте об этом: арабская буква «ба» (ب) - это «ба», независимо от того, где она появляется в предложении.

2 голосов
/ 02 июня 2011

Я предполагаю, что вам нужно преобразовать بهروز в \ u0628 \ u0664 \ u0631 \ u0648 \ u0632, взглянуть на http://hsivonen.iki.fi/php-utf8/ все, что вам нужно сделать после вызова unicodeToUtf8 ('بهروز'), это преобразовать целые числа, которые вы получилив массиве в шестнадцатеричный формат и убедитесь, что у них есть 4 цифры и префикс em с \ u, и все готово.также вы можете получить то же самое, используя json_encode

json_encode('بهروز') // returns "\u0628\u0647\u0631\u0648\u0632"

EDIT:

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

вот пример:

$string = 'بب'; // \u0628\u0628
$bidiString = fribidi_log2vis($string, FRIBIDI_LTR, FRIBIDI_CHARSET_UTF8);
json_encode($bidiString); // \ufe90\ufe91

РЕДАКТИРОВАТЬ:

Я только что вспомнил, что tcpdf имеет алгоритм двунаправленного текста, который реализован с использованием чистого php, поэтому, если вы не можете заставить работать phpidi расширение php, вы можете использовать tcpdf (utf8Bidi по умолчанию защищен, поэтому вам нужносделать его публичным)

require_once('utf8.inc'); // http://hsivonen.iki.fi/php-utf8/
require_once('tcpdf.php'); // http://www.tcpdf.org/
$t = new TCPDF();
$text = 'بب';
$t->utf8Bidi(utf8ToUnicode($text)); // will return an array like array(0 => 65168, 1 => 65169)
0 голосов
/ 25 августа 2013

Я думаю, вы могли бы попробовать:

<meta charset="utf-8" />

, если это не работает, используйте FloatBird Answer

0 голосов
/ 30 мая 2011

Попробуйте это:

<?php
    $string = 'a';
    $expanded = iconv('UTF-8', 'UTF-32', $string);
    $arr = unpack('L*', $expanded);
    print_r($arr);
?>
...