如何在PHP中验证XML的CDATA部分

dan*_*car 4 php xml

我根据用户输入创建了一个XML.其中一个xml节点有一个CDATA部分.如果插入CDATA部分的其中一个字符是'特殊'(我认为是一个控制字符),则整个xml变为无效.

例:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('root'))
    ->appendChild($dom->createCDATASection(
        "This is some text with a SOH char \x01."
    ));

$test = new DOMDocument;
$test->loadXml($dom->saveXML());
echo $test->saveXml();
Run Code Online (Sandbox Code Playgroud)

会给

Warning: DOMDocument::loadXML(): CData section not finished
This is some text with a SOH cha in Entity, line: 2 in /newfile.php on line 17

Warning: DOMDocument::loadXML(): PCDATA invalid Char value 1 in Entity, line: 2 in /newfile.php on line 17

Warning: DOMDocument::loadXML(): Sequence ']]>' not allowed in content in Entity, line: 2 in /newfile.php on line 17

Warning: DOMDocument::loadXML(): Sequence ']]>' not allowed in content in Entity, line: 2 in /newfile.php on line 17

Warning: DOMDocument::loadXML(): internal errorExtra content at the end of the document in Entity, line: 2 in /newfile.php on line 17
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)

在PHP中有一个好方法确保CDATA部分有效吗?

Gor*_*don 8

允许的字符的范围CDATA部

#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)

因此,您必须清理字符串以仅包含这些字符.