【发布时间】:2019-07-08 10:55:36
【问题描述】:
使用以下字符:" & ' < > £ 进行测试。我的代码使用 PHP 和 DOMDocument 构建了一个 XML 文件。
<?php
$xml = new DOMDocument();
$xml->formatOutput = true;
$root = $xml->createElement('Start_Of_XML');
$xml->appendChild($root);
$el = $xml->createElement($node,htmlspecialchars(html_entity_decode($value[$i],ENT_QUOTES,'UTF-8'),ENT_QUOTES,'UTF-8'));
$parent->appendChild($el);
?>
上面的htmlspecialchars() 方法将这些字符转换为:
" &amp; ' &lt; &gt; £
分别。也就是说,双引号、撇号和井号无法编码。
如果我调整代码以使用 htmlentities() 代替:
<?
$el = $xml->createElement($node,htmlentities(html_entity_decode($value[$i],ENT_QUOTES,'UTF-8'),ENT_QUOTES,'UTF-8'));
?>
字符被解析为:
" &amp; ' &lt; &gt; &pound;
因此,井号与其他符号一起被转换,但在保存 XML 时,引号和撇号再次无法编码。
搜索了几篇帖子后,我不知所措地找到了解决方案?
编辑:
使用Gordon's 答案作为基础,我得到了我正在寻找的结果,使用类似于https://3v4l.org/ZksrE 的东西
ThW 付出了巨大的努力。看起来还挺全面的。我将接受这个作为解决方案。谢谢。
【问题讨论】:
-
看来
createElement可以方便地为您识别&quot;和&#039并将它们转换回原来的引号:3v4l.org/qof5l -
太棒了!请问如何重新转换它们?
-
我尝试使用
createTextNode(),但没有结果。 3v4l.org/WMBfW你能推我一下吗? -
等一下,我认为 Gordon 的回答可能会解决它stackoverflow.com/questions/2822774/…