2010-01-11 4 views
1

Я пытаюсь преобразовать это, чтобы читаемый текст UTF8 в PHPПреобразование этих типов Юникода в UTF8 в PHP

Tel Aviv-Yafo (Hebrew: \u05ea\u05b5\u05bc\u05dc\u05be\u05d0\u05b8\u05d1\u05b4\u05d9\u05d1-\u05d9\u05b8\u05e4\u05d5\u05b9; Arabic: \u062a\u0644 \u0623\u0628\u064a\u0628\u200e, Tall \u02bcAb\u012bb), usually called Tel Aviv 

Любые идеи о том, как сделать это?

Пробовал несколько методов онлайн, но не смог найти.

В этом случае у меня есть юникода на иврите и арабском

+0

Duplicate: http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha –

ответ

1

См this comment способ получить Юникода символ из его числового кода. Затем вы можете написать замену регулярного выражения, которая заменит каждый шаблон \uXXXX эквивалентным символом.

В качестве альтернативы, вы можете заменить каждый \uXXXX шаблон с его соответствием &#XXXX; HTML формы лица, а затем использовать следующее:

mb_convert_encoding(string_with_html_entities, 'UTF-8', 'HTML-ENTITIES'); 

Более полный пример:

// The four \\\\ in the pattern here are necessary to match \u in the original string 
$replacedString = preg_replace("/\\\\u(\d{4})/", "&#$1;", $originalString); 
$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 
+0

Не могли бы вы дать мне пример? Я не понял пример в ссылке. Скажите, что у меня есть эта строка «\ u05ea» где-то в тексте - как бы я изменил ее на свою форму сущности html как ее не «ea;» или первый вариант, который вы упомянули. Спасибо за помощь. – Simon

+0

Несомненно, я добавил более полный пример моего ответа. – Amber

+0

@ Dav: Почему '\\\\ u'? Разве '' 'u' недостаточно? Я также думаю, что '\ d {2,4}' сделает его более полным. –

0

Я пытаюсь этот код:

function unicode_conv($originalString) { 
    // The four \\\\ in the pattern here are necessary to match \u in the original string 
    $replacedString = preg_replace("/\\\\u(\d{4})/", "&#$1;", $originalString); 
    $unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 
    return $unicodeString; 
} 

echo unicode_conv("Tel Aviv-Yafo (Hebrew: \u05ea\u05b5\u05bc\u05dc\u05be\u05d0\u05b8\u05d1\u05b4\u05d9\u05d1-\u05d9\u05b8\u05e4\u05d5\u05b9; Arabic: \u062a\u0644 \u0623\u0628\u064a\u0628\u200e, Tall \u02bcAb\u012bb), usually called Tel Aviv, is the second largest city in Israel, with an estimated population of 393,900. The city is situated on the Israeli Mediterranean coast, with a land area of 51.8\u00a0square kilometres (20.0\u00a0sq\u00a0mi). It is the largest and most populous city in the metropolitan area of Gush Dan, home to 3.15\u00a0million people as of 2008. The city is governed by the Tel Aviv-Yafo municipality, headed by Ron Huldai.\nTel Aviv was founded in 1909 on the outskirts of the ancient port city of Jaffa (Hebrew: \u05d9\u05b8\u05e4\u05d5\u05b9\u200e, Yafo; Arabic: \u064a\u0627\u0641\u0627\u200e, Yaffa). The growth of Tel Aviv soon outpaced Jaffa, which was largely Arab at the time. Tel Aviv and Jaffa were merged into a single municipality in 1950, two years after the establishment of the State of Israel. Tel Aviv's White City, designated a UNESCO World Heritage Site in 2003, comprises the world's largest concentration of Modernist-style buildings.\nTel Aviv is classified as a beta+..."); 

Результаты неверно, на самом деле это не имеет особого значения, несколько букв заменены на греческий/русский, а не на иврит/арабский.

Его как номер объекта неверен.

1

Вы должны добавить 'x' после '#' в строку замены, чтобы указать, что используются шестнадцатеричные числа.

$replacedString = preg_replace("/\\\\u(\d{4})/", "&#x$1;", $originalString); 
$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 
2

это не всегда работает, потому что/uXXXX-код иногда может содержать цифры и буквы. попробуйте заменить \ d (просто цифры) \ w (\ w соответствует как словам, так и цифрам).

function unicode_conv($originalString) { 
    // The four \\\\ in the pattern here are necessary to match \u in the original string 
    $replacedString = preg_replace("/\\\\u(\w{4})/", "&#$1;", $originalString); 
    $unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 
    return $unicodeString; 
} 
6

Ни один из ответов не работает отлично, как есть. я объединил их вместе, и мои результаты сложения в этом одном:

$replacedString = preg_replace("/\\\\u([0-9abcdef]{4})/", "&#x$1;", $originalString); 
$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 

Это один определенно делает работу :)

+0

Я должен упомянуть, что использование метода mb_convert_encoding() преобразует любой " в исходную строку в "потому что это включает в себя анализ HTML !!! beware – dzeikei

1

я столкнулся с той же проблемой в последнее время, поэтому был рад видеть этот вопрос. Делая некоторые тесты, я нашел следующий код работает:

$replacedString = preg_replace("/\\\\u([0-9abcdef]{4})/", "&#x$1;", $original_string); 
//$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); 

Единственное, что я изменился, что я закомментирована 2-ой строке кода. Веб-страница должна быть настроена для отображения UTF-8.

Наслаждайтесь!

Смежные вопросы