Преобразование этих типов Unicode в UTF8 в PHP - PullRequest
1 голос
/ 12 января 2010

Я пытаюсь преобразовать это в читаемый текст 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

Есть идеи, как это сделать?

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

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

Ответы [ 6 ]

6 голосов
/ 25 сентября 2011

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

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

Этот, безусловно, работает:)

2 голосов
/ 04 декабря 2010

это не всегда работает, потому что код / ​​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;
}
1 голос
/ 12 декабря 2011

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

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

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

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

1 голос
/ 02 декабря 2010

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

$replacedString = preg_replace("/\\\\u(\d{4})/", "&#x$1;", $originalString);
$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES');
1 голос
/ 12 января 2010

См. этот комментарий , чтобы узнать, как получить символ юникода из его числового кода. Затем вы можете написать замену регулярного выражения, которая заменит каждый шаблон \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 голосов
/ 12 января 2010

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

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+...");

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

Это как неправильный номер сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...