Преобразование строки UTF-8 в / из 7-битного XML в PHP - PullRequest
2 голосов
/ 23 сентября 2008

Как можно преобразовать строки UTF-8 (то есть 8-битную строку) в / из XML-совместимых 7-битных строк (то есть ASCII для печати с числовыми объектами)?

т.е. функция encode() такая, что:

encode("“£”") -> "“£”"

decode() также будет полезно:

decode("“£”") -> "“£”"

Пара PHP htmlenties() / html_entity_decode() не делает правильных действий:

htmlentities(html_entity_decode("“£”")) ->
  "“£”"

Трудоемкое указание типов немного помогает, но все же возвращает несовместимые с XML именованные сущности, а не числовые:

htmlentities(html_entity_decode("“£”", ENT_QUOTES, "UTF-8"), ENT_QUOTES, "UTF-8") ->
  "“£”"

Ответы [ 2 ]

6 голосов
/ 11 октября 2008

mb_encode_numericentity делает это точно.

0 голосов
/ 11 октября 2008

Это немного обходной путь, но я прочитал немного о iconv(), и я не думаю, что он даст вам числовые объекты (не проверенные)

function decode( $string )
{
  $doc = new DOMDocument( "1.0", "UTF-8" ); 
  $doc->LoadXML( '<?xml version="1.0" encoding="UTF-8"?>'."\n".'<x />', LIBXML_NOENT );
  $doc->documentElement->appendChild( $doc->createTextNode( $string ) );
  $output = $doc->saveXML( $doc );
  $output = preg_replace( '/<\?([^>]+)\?>/', '', $output ); 
  $output = str_replace( array( '<x>', '</x>' ), array( '', '' ), $output );
  return trim( $output );
}

Это, однако, я поставил на тест. Я мог бы сделать обратное позже, только не задерживай дыхание; -)

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