php - 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);
}
}
}
更新:我使用了字符串替换和 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 - 内部函数调用的结束函数 - PHP
- mysql - 从多个表Mysql查询中计算总数
- wordpress - 如何使用 wordpress 将多步骤联系表单集成到翻转框中?
- asp.net-mvc - 无法在 nopcommerce 3.80 的管理控制器中加载方法
- angular - Angular 7 PATCH 方法将元素添加到列表
- javascript - 如何使用 javascript 将 HTML 网页上的字符串替换为另一个字符串?
- php - 如何修复类 LetterGenerator 的对象无法在 Laravel 中转换为字符串?
- angular - 错误:[HPM] 上下文无效。期待类似:“/api”或[“/api”,“/ajax”]
- javascript - 如何动态结束加载动画
- jax-rs - /voterRestService 上已经有一个端点正在运行