如何将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") ->
"“£”"
答案 0 :(得分:6)
答案 1 :(得分: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 );
}
然而,我已经进行了测试。我可能会在以后反过来,只是不要屏住呼吸; - )