Как преобразовать кодовые страницы Unicode в шестнадцатеричные HTML-объекты?

У меня есть файл данных (точнее, \U00e8 Apple), который имеет \U00e8 Unicode, такие как \U00e8 и \U2019 . Мне нужно превратить их в действительные шестнадцатеричные объекты HTML, используя PHP.

То, что я сейчас делаю, это длинная строка:

  $fileContents = str_replace("\U00e8", "è", $fileContents); $fileContents = str_replace("\U2019", "’", $fileContents); 

Который явно ужасен. Я мог бы использовать регулярное выражение для преобразования \U и всех конечных 0s в &#x , а затем придерживаться конечного ; , но это также кажется тяжелым.

Есть ли простой, простой способ взять строку и заменить все юникодовые кодовые точки на объекты HTML?

Вы можете использовать preg_replace :

 preg_replace('/\\\\U0*([0-9a-fA-F]{1,5})/', '&#x\1;', $fileContents); 

Тестирование RE:

 PS> 'some \U00e8 string with \U2019 embedded Unicode' -replace '\\U0*([0-9a-f]{1,5})','&#x$1;' some è string with ’ embedded Unicode 

Вот правильный ответ, который касается того факта, что это единицы кода, а не кодовые точки, и позволяет добавлять ненужные символы.

 function unenc_utf16_code_units($string) { /* go for possible surrogate pairs first */ $string = preg_replace_callback( '/\\\\U(D[89ab][0-9a-f]{2})\\\\U(D[cf][0-9a-f]{2})/i', function ($matches) { $hi_surr = hexdec($matches[1]); $lo_surr = hexdec($matches[2]); $scalar = (0x10000 + (($hi_surr & 0x3FF) << 10) | ($lo_surr & 0x3FF)); return "&#x" . dechex($scalar) . ";"; }, $string); /* now the rest */ $string = preg_replace_callback('/\\\\U([0-9a-f]{4})/i', function ($matches) { //just to remove leading zeros return "&#x" . dechex(hexdec($matches[1])) . ";"; }, $string); return $string; }