Как преобразовать арабские символы в Unicode с помощью PHP
Я хочу знать, как преобразовать слово в unicode точно так же, как:
http://www.arabunic.free.fr/
может ли кто-нибудь знать, как это сделать с использованием PHP, учитывая, что арабский текст может содержать лигатуры?
спасибо
Edit
Я не уверен, что это за "юникод", но мне нужно, чтобы арабский символ был эквивалентен номеру машины, учитывая, что арабские символы имеют разные контекстуальные формы в зависимости от их положения - см. здесь:
http://en.wikipedia.org/wiki/Arabic_alphabet#Table_of_basic_letters
тот же символ в другом положении:
ب | ب | ب | ب
Я думаю, что это должен быть способ конвертировать каждый арабский символ в это эквивалентное число, но как?
Edit
Я все еще верю, что есть способ конвертировать каждый символ в форму в зависимости от позиций
любая идея оценена.
Ответы
Ответ 1
Все, что вам нужно, это функция: 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
Просто установите элемент, содержащий арабский текст, в "rtl" (справа налево), затем введите правильно написанный арабский текст, и текст будет течь со всеми искаженными лигатурами.
div {
Направление: РТЛ;
}
На стороне заметьте, не забудьте прочитать "Абсолютный минимум Каждый разработчик программного обеспечения абсолютно должен положительно знать о юникодном и символьном наборах (никаких отговорок! )"
Подумайте об этом: арабское письмо "ba" (ب) является "ba" независимо от того, где оно появляется в предложении.
Ответ 3
Я предполагаю, что вы хотите конвертировать بهروز в \u0628\u0631\u0648\u0632 посмотреть http://hsivonen.iki.fi/php-utf8/ все, что у вас есть сделать после вызова unicodeToUtf8 ('بهروز') - преобразовать целые числа, которые вы получили в массиве, в шестнадцатеричный и убедиться, что они имеют 4digigts и префикс em с \u, и все готово. также вы можете получить то же самое с помощью json_encode
json_encode('بهروز') // returns "\u0628\u0647\u0631\u0648\u0632"
EDIT:
Кажется, вы хотите получить коды символов بب, которые сначала отличаются от второго, все, что вам нужно сделать, это применить алгоритм bidi в тексте, используя fribidi_log2vis, затем получив код символа одним из способов, о которых я говорил ранее.
здесь пример:
$string = 'بب'; // \u0628\u0628
$bidiString = fribidi_log2vis($string, FRIBIDI_LTR, FRIBIDI_CHARSET_UTF8);
json_encode($bidiString); // \ufe90\ufe91
EDIT:
Я только что вспомнил, что tcpdf имеет биди-алгоритм, который реализован с использованием чистого php, поэтому, если вы не можете получить расширение phryidi 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)
Ответ 4
Попробуйте следующее:
<?php
$string = 'a';
$expanded = iconv('UTF-8', 'UTF-32', $string);
$arr = unpack('L*', $expanded);
print_r($arr);
?>
Ответ 5
Я думаю, вы могли бы попробовать:
<meta charset="utf-8" />
Если это не сработает, используйте ответ FloatBird