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
(PHP 5)
DOMDocument::createCDATASection — Crée un nouveau noeud cdata
Description
DOMCDATASection DOMDocument::createCDATASection
( string $data
)
Cette fonction crée une nouvelle instance de la classe DOMCDATASection. Ce noeud ne sera pas affiché dans le document, à moins qu'il ne soit inséré avec DOMNode->appendChild().
Liste de paramètres
- data
-
Le contenu du cdata.
Valeurs de retour
Le nouveau DOMCDATASection ou FALSE si une erreur survient.
Voir aussi
- DOMNode::appendChild - Ajoute un nouveau fils à la fin des fils
- DOMDocument::createAttribute - Crée un nouvel attribut
- DOMDocument::createAttributeNS - Crée un nouvel attribut avec un espace de noms associé
- DOMDocument::createComment - Crée un nouveau noeud de commentaire
- DOMDocument::createDocumentFragment - Crée un nouveau fragment de document
- DOMDocument::createElement - Crée un nouveau noeud
- DOMDocument::createElementNS - Crée un nouveau noeud avec un espace de noms associé
- DOMDocument::createEntityReference - Crée un nouveau noeud de référence d'entité
- DOMDocument::createProcessingInstruction - Crée un nouveau noeud PI
- DOMDocument::createTextNode - Crée un nouveau noeud de texte
DOMDocument::createCDATASection
info at troptoek dot com
25-Mar-2008 05:40
25-Mar-2008 05:40
loathsome
04-Aug-2007 09:28
04-Aug-2007 09: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);
}
?>
