难以通过XML输出“HTML字符串代码”

时间:2010-10-05 21:56:28

标签: php xml ajax

通过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.

我该如何解决这个问题?我希望我有足够的具体能让你理解我的问题。

3 个答案:

答案 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编码的优势。