DOMDocument::createCDATASection

(PHP 5, PHP 7, PHP 8)

DOMDocument::createCDATASection创建新的 cdata 节点

说明

public DOMDocument::createCDATASection(string $data): DOMCdataSection|false

此函数创建一个新的 DOMCDATASection 类实例。除非使用(例如)DOMNode::appendChild() 插入,否则此节点不会显示在文档中。

参数

data

cdata 的内容。

返回值

新的 DOMCDATASection 或者,如果发生错误,则为 false

参见

添加注释

用户贡献的注释 4 个注释

3
info at troptoek dot com
16 年前
一个常见的问题似乎是将 javascript 添加到 CDATA 并且浏览器抛出 javascript 错误。 为了确保 javascript 工作,在添加 CDATA 时使用以下代码

<?php
/**
* 将字符数据追加到节点,并检查 javascript 节点
*
* @param DOMElement $appendToNode
* @param string $text
*/
function appendCdata($appendToNode, $text)
{
if (
strtolower($appendToNode->nodeName) == 'script') { // Javascript hack
$cm = $appendToNode->ownerDocument->createTextNode("\n//");
$ct = $appendToNode->ownerDocument->createCDATASection("\n" . $text . "\n//");
$appendToNode->appendChild($cm);
$appendToNode->appendChild($ct);
} else {
// Normal CDATA node
$ct = $appendToNode->ownerDocument->createCDATASection($text);
$appendToNode->appendChild($ct);
}
}
?>
结果应该是

<script type="text/javascript">
//<![CDATA[
function someJsText() {
document.write('Some js with <a href="#">HTML</a> content');
}
//]]></script>
2
loathsome
17 年前
这是一个函数,它将在来自 SimpleXML 的字符串周围创建一个 CDATA 部分。

<?php
function sxml_cdata($path, $string){
$dom = dom_import_simplexml($path);
$cdata = $dom->ownerDocument->createCDATASection($string);
$dom->appendChild($cdata);
}
?>
1
jesdisciple dot FOO at gmail dot BAR dot com
14 年前
如果您想参考返回对象的类的文档,请参阅 https://php.net/manual/en/class.domcharacterdata.php
-5
Marc info[at]braincast.nl
13 年前
以下是一些代码,它接受一个关联数组并将其打印为 XML(),但为每个字符串创建 CDATA 部分

<?php
class SimpleXMLExtended extends SimpleXMLElement{
public function
addCData($string){
$dom = dom_import_simplexml($this);
$cdata = $dom->ownerDocument->createCDATASection($string);
$dom->appendChild($cdata);
}
}
function
assocArrayToXML($root_element_name,$ar){
$xml = new SimpleXMLExtended("<?xml version=\"1.0\"?><{$root_element_name}></{$root_element_name}>");
$f = create_function('$f,$c,$a','
foreach($a as $k=>$v) {
if(is_array($v)) {
if (!is_numeric($k))$ch=$c->addChild($k);
else $ch = $c->addChild(substr($c->getName(),0,-1));
$f($f,$ch,$v);
} else {
if (is_numeric($v)){ $c->addChild($k, $v);
}else{$n = $c->addChild($k); $n->addCData($v);}
}
}'
);
$f($f,$xml,$ar);
return
$xml->asXML();
}

/* sample */
$result = array("title"=>"CDATA Sample");
$result['items'] = array();
$result['items'][] = array('title'=>'Some string', 'number' => 1);
$result['items'][] = array('title'=>'Some string', 'number' => 2);
$result['items'][] = array('title'=>'Some string', 'number' => 3);

echo
assocArrayToXML('result',$result);
?>

is_numeric 检查可以更改为更复杂的正则表达式来检查字符串是否实际上是 XML 不安全的,但对我来说这是有效的。
To Top