我需要将XML文档发送到SOAP Web服务(我没有任何控制权)。我收到了一个错误,因为文本包含HTML实体,所以我干净的文本字符串与html_entity_decode()
,然后htmlspecialchars()
之前,我的文本添加到SimpleXML的对象,像这样:通过PHP清理XML文档中的十六进制实体
if(!mb_detect_encoding($string, "UTF-8") == "UTF-8") {
$string = utf8_encode($string);
}
$string = htmlspecialchars(html_entity_decode($string, ENT_COMPAT, 'UTF-8'), ENT_COMPAT, 'UTF-8');
$xml->addChild('PROD_DESC', $string);
但是,尽管它清除命名实体其形式为©
它不会对像á
这样的十六进制实体做任何事情,我所说的服务也不接受这些实体。
In this post我发现了一个可能的解决方案,但是当我将该字符串传递给整洁的cleanString函数时,我得到的字符串相同,但它不会触及这些实体。
[PHP的可能重复:使用的DomDocument每当我试着写UTF-8写入它的十六进制表示。 ](http://stackoverflow.com/questions/3575109/php-using-domdocument-whenever-i-try-to-write-utf-8-it-writes-the-hexadecimal-no) – Gordon 2011-01-20 15:59:31
是的,对不起,我没有看到那个。你在那里做了一个很好的解释。 – AJJ 2011-01-20 16:19:40