通过XML输出“HTML字符串代码”时遇到了麻烦。我在下面给出了一个例子。在服务器端,我有一些用PHP编写的代码。
$htmlCode = "<div>...........................</div>";
header("Content-type: text/xml");
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<info>";
echo "<htmlCode>";
echo $htmlCode;
echo "</htmlCode>";
echo "</info>";
问题在于“HTML字符串代码”或上面的$ htmlCode具有标记元素,因此“HTML字符串代码”将被视为XML代码。我希望将输出视为字符串。
在客户端,我有一个“AJAX调用”来检索HTML代码的字符串。
document.getElementById('someID').innerHTML=xmlhttp.responseXML.getElementsByTagName("htmlCode")[0].childNodes[0].nodeValue;//I got nothing because the string is treated as XML code.
我该如何解决这个问题?我希望我有足够的具体能让你理解我的问题。
答案 0 :(得分:5)
您正在寻找CDATA
。
术语CDATA用于不应由XML解析器解析的文本数据。
解析器会忽略CDATA部分内的所有内容。
CDATA部分以
<![CDATA[
开头,以]]>
结尾:
// escape closing tags
$htmlCode = str_replace("]]>", "<![CDATA[]]]]><![CDATA[>]]>", $htmlCode);
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<info>";
echo "<htmlCode>";
echo "<![CDATA[".$htmlCode."]]>";
echo "</htmlCode>";
echo "</info>";
从here
添加了转义修正答案 1 :(得分:3)
不要从字符串构建XML。只是不要。有正确使用的库可以做正确的事情。 PHP's DOM implementation就是其中之一。
$myHtmlString = "<div>Some HTML</div>";
$xml = new DOMDocument('1.0', 'utf-8');
$info = $xml->createElement('info');
$xml->appendChild($info);
$htmlCode = $xml->createElement('htmlCode', $myHtmlString);
$info->appendChild($htmlCode);
echo $xml->saveXML();
这似乎是更复杂的方法,但实际上这确保了您的XML是正确的。相反,只是将几个字符串放在一起会在某些时候出错。
答案 2 :(得分:1)
使用htmlspecialchars()
。尽管此函数以HTML命名,但它对XML也是完全可以接受的。 (htmlentities()
不会,但你几乎从不想使用那个。)
<?php
$htmlCode = "<div>...........................</div>";
header("Content-type: text/xml");
echo '<?xml encoding="ISO-8859-1"?>'; // really? sure?
?>
<info>
<htmlCode><?php echo htmlspecialchars($htmlCode); ?></htmlCode>
</info>
使用CDATASection也没关系,但鉴于在这种情况下需要转义序列]]>
,实际上没有太多优于XML编码的优势。