使用 CDATA 时,它不会显示所有内容并添加右方括号

When using CDATA it's not showing all content and adding closing square brackets

从 API 创建了一个 XML 提要后,我知道我必须对几个节点使用 CDATA。 有些工作正常,没有任何问题,但有些似乎缺少内容并显示 ]]> 到最后。

$introduction = substr( $property['description'], 0 , 250 ); // Truncate Description at 250 characters
$description = $property['description'];

$ltd_introduction = $xml->createElement( 'introduction', htmlspecialchars( "<![CDATA[$introduction]]>" ) );
$ltd_description = $xml->createElement( 'description', htmlspecialchars( "<![CDATA[$description]]>" ) );

新创建的 XML 供稿显示:

<introduction>
<![CDATA[Lorem ipsum dolor sit amet]]>
</introduction>
<description>
<![CDATA[Lorem ipsum dolor sit amet]]>
</description>

但是在呈现页面时我混合了以下内容:

Lorem ipsum dolor sit amet

lorem ipsum dolor sit amet]]>

坐下见面]]>

我知道可能会有特殊字符,<br> 在 XML 供稿中显示为 <br > 此外,还会有一些字母包含重音符号.

阅读各种答案后,我认为有必要添加 CDATA 部分和 htmlspecialcharacters,但似乎仍然存在问题。

CDATA 节是一种特殊的字符数据节点,无需解码。它与普通文本节点不同。另外 DOMDocument::createElement() 的第二个参数被破坏了。它只做了一半的必要转义。更好的方法是使用相应的方法创建文本节点或 CDATA 部分并附加它。 DOM 将根据需要进行转义。

以下是两种节点类型的示例:

$document = new DOMDocument();
$content = $document->appendChild($document->createElement('content'));

$content
  ->appendChild($document->createElement('introduction'))
  ->appendChild($document->createTextNode('Some content & more'));
$content
  ->appendChild($document->createElement('introduction'))
  ->appendChild($document->createCdataSection('Some content & more'));

$document->formatOutput = TRUE;
echo $document->saveXml();

输出:

<?xml version="1.0"?>
<content>
  <introduction>Some content &amp; more</introduction>
  <introduction><![CDATA[Some content & more]]></introduction>
</content>