(PHP 5)

DOMDocument::createCDATASection Создает новый cdata узел


public DOMCDATASection DOMDocument::createCDATASection ( string $data )

Эта функция создает новый объект класса DOMCDATASection. Этот узел не будет отображаться в документе до тех пор, пока он не будет вставлен, например, функцией DOMNode::appendChild().

Список параметров


Содержимое cdata.

Возвращаемые значения

Новый объект класса DOMCDATASection либо FALSE в случае ошибки.

Смотрите также


Here's a function that will create a CDATA-section around a string coming from SimpleXML.

function sxml_cdata($path$string){
$dom dom_import_simplexml($path);
$cdata $dom->ownerDocument->createCDATASection($string);
2007-08-04 17:28:02
A common issue seems to be adding javascript to CDATA and the browser throwing a javascript error. To ensure the javascript works use the following code when adding CDATA:

 * Append Caracter Data to a node and check for a javascript node
 * @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//");
    } else { 
// Normal CDATA node
$ct $appendToNode->ownerDocument->createCDATASection($text);
The result should be:

<script type="text/javascript">
function someJsText() {
   document.write('Some js with <a href="#">HTML</a> content');
2008-03-24 23:40:09
If you would like to refer to the documentation for the class of the returned object, see class.domcharacterdata
2010-07-08 07:44:18
Here's some code that takes an associative array and prints it asXML() but creates CDATA sections for each string

class SimpleXMLExtended extends SimpleXMLElement
    public function 
$dom dom_import_simplexml($this);
$cdata $dom->ownerDocument->createCDATASection($string);
$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));
                } else {
                    if (is_numeric($v)){ $c->addChild($k, $v);
                    }else{$n = $c->addChild($k); $n->addCData($v);}

/* 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);


The is_numeric check could be changed by a more elaborate regular expression to check if the string is actually xml unsafe but this worked for me.
2011-03-08 03:55:28

    Поддержать сайт на родительском проекте КГБ