我需要将XML文档发送到SOAP Web服务(我没有任何控制权)。我收到错误是因为文本包含html实体,所以在我将文本添加到simpleXML对象之前,我用html_entity_decode()
然后htmlspecialchars()
清理文本字符串,如下所示:
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函数时,我得到了相同的字符串,它也没有触及那些实体。
答案 0 :(得分:2)
数字实体由SimpleXML添加,因为您的XML文档没有声明的编码:
// with declared encoding :
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><x></x>');
$xml->addChild('PROD_DESC', "à");
// result: <PROD_DESC>à</PROD_DESC>
// without declared encoding :
$xml = simplexml_load_string('<?xml version="1.0"?><x></x>');
$xml->addChild('PROD_DESC', "à");
// result: <PROD_DESC>à</PROD_DESC>
答案 1 :(得分:0)
您是否可以将字符串作为base64编码数据传递?这将消除剥离任何东西的需要。