2

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") ->
  "“£”"
4

2 回答 2

6

mb_encode_numericentity正是这样做的。

于 2008-10-11T12:24:50.727 回答
0

这是一种解决方法,但我阅读了一些内容,但我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 );
}

但是,我已经对此进行了测试。稍后我可能会做相反的事情,只是不要屏住呼吸;-)

于 2008-10-10T21:16:27.267 回答