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:
<?php
/**
* 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//");
$appendToNode->appendChild($cm);
$appendToNode->appendChild($ct);
} else { // Normal CDATA node
$ct = $appendToNode->ownerDocument->createCDATASection($text);
$appendToNode->appendChild($ct);
}
}
?>
The result should be:
<script type="text/javascript">
//<![CDATA[
function someJsText() {
document.write('Some js with <a href="#">HTML</a> content');
}
//]]></script>
DOMDocument::createCDATASection
(No version information available, might be only in CVS)
DOMDocument::createCDATASection — Create new cdata node
Descripción
DOMCDATASection DOMDocument::createCDATASection
( string $data
)
This function creates a new instance of class DOMCDATASection. Este nodo no sera mostrado en el documento a no ser que sea introducido por ejemplo con DOMNode->appendChild().
Lista de parámetros
- data
-
The content of the cdata.
Valores retornados
The new DOMCDATASection or FALSE if an error occured.
Ver también
- DOMNode::appendChild
- DOMDocument::createAttribute
- DOMDocument::createAttributeNS
- DOMDocument::createComment
- DOMDocument::createDocumentFragment
- DOMDocument::createElement
- DOMDocument::createElementNS
- DOMDocument::createEntityReference
- DOMDocument::createProcessingInstruction
- DOMDocument::createTextNode
DOMDocument::createCDATASection
info at troptoek dot com
25-Mar-2008 06:40
25-Mar-2008 06:40
loathsome
04-Aug-2007 11:28
04-Aug-2007 11:28
Here's a function that will create a CDATA-section around a string coming from SimpleXML.
<?php
function sxml_cdata($path, $string){
$dom = dom_import_simplexml($path);
$cdata = $dom->ownerDocument->createCDATASection($string);
$dom->appendChild($cdata);
}
?>
