如何解决PHP-删除xml中的特殊字符
如何删除打开和关闭XML之间的特殊字符?
我尝试使用递归函数。因此在这种情况下,它对我不起作用。
$sampleXML = '<?xml version="1.0" encoding="ISO-8859-1"?>
<mainTag type="user">
<note>
<PersonName>
<GivenName>Replace & this</GivenName>
<MiddleName>Replace < this</MiddleName>
</PersonName>
<Aliases>
<PersonName>
<GivenName>Replace > this</GivenName>
<FamilyName>Replace " this</FamilyName>
</PersonName>
</Aliases>
<DemographicDetail>
<GovernmentId countryCode="US">testIDs data </GovernmentId>
<DateOfBirth>2000-12-12</DateOfBirth>
</DemographicDetail>
</note>
<anothertag>
<data type="credit">
<Vendor score="yes"> vendor name </Vendor>
</data>
</anothertag>
</mainTag>';
$doc = new DOMDocument;
$doc->loadXML($xml);
$this->removeSpecialCharacterNodes($doc);
$xpath = new DOMXpath($doc);
$xml = $doc->saveXML($doc,LIBXML_NOEMPTYTAG);
替换以下内容
& by &
> by <
< by >
" by "
' by '
我使用了以下递归代码,但返回空值
public function removeSpecialCharacterNodes(DOMNode $node) {
// echo "aa";
// var_dump($node->childNodes);
$str = $node->childNodes;
var_dump($node->childNodes);
foreach ($node->childNodes as $child){
if($child->hasChildNodes()) {
$this->removeSpecialCharacterNodes($child);
} else{
$child->nodeValue = str_ireplace('&','&',$child->nodeValue);
}
}
}
更新: 我已使用字符串replace和htmlspecialchars仍然是特殊字符的方式进行了更新。
$doc = new DOMDocument;
$doc->loadXML( $sampleXML);
foreach ($doc->documentElement->childNodes as $node) {
if($node->nodeType==1){
$oldAddressLine = $node->getElementsByTagName('AddressLine')->Item(0);
// $elle = str_ireplace(
// array( "'"),// array( "'"),// $oldAddressLine->nodeValue
// );
// $newelement = $doc->createElement('AddressLine',$elle);
$chk = $oldAddressLine->nodeValue;
$newelement = $doc->createElement('AddressLine',htmlspecialchars( $chk,ENT_XML1 ));
if ($oldAddressLine->parentNode != null) {
$oldAddressLine->parentNode->replaceChild($newelement,$oldAddressLine);
}
}
}
$xpath = new DOMXpath($doc);
$finalVal = $doc->saveXML($doc,LIBXML_NOEMPTYTAG);
echo "<pre>".htmlentities($finalVal)."</pre>"; exit;
解决方法
所谓的特殊字符必须是xml中的实体。为此,只需使用htmlspecialchars()对那些字符进行编码。
$value = htmlspecialchars( "Ben & Jerry 's",ENT_XML1 );
,
从PHP 5.4开始,您可以使用:
htmlspecialchars($ string,ENT_XML1); 您应该指定编码,例如:
htmlspecialchars($ string,ENT_XML1,'UTF-8'); 更新资料 请注意,上面只会转换:
&至&
至 如果要转义文本以在双引号中包含的属性中使用:
htmlspecialchars($ string,ENT_XML1 | ENT_COMPAT,'UTF-8'); 除了&,之外,还会将“转换为”。
如果您的属性用单引号引起来:
htmlspecialchars($ string,ENT_XML1 | ENT_QUOTES,'UTF-8'); 除了&,和“。”外,还会将'转换为'。
(当然,甚至可以在属性之外使用它。)
有关htmlspecialchars的信息,请参见手册条目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。