2010-04-29 9 views
2

Ceci est mon code:pourquoi citations libxml2 à partir double barre oblique en CDATA avec javascript

<?php 
$data = <<<EOL 
<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC 
    "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <script type="text/javascript"> 
    //<![CDATA[ 
    var a = 123; // JS code 
    //]]> 
    </script> 
</html> 
EOL; 

$dom = new DOMDocument(); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = false; 
$dom->loadXml($data); 
echo '<pre>' . htmlspecialchars($dom->saveXML()) . '</pre>'; 

C'est le résultat:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<script type="text/javascript"><![CDATA[ 
//]]><![CDATA[ 
var a = 123; // JS code 
//]]><![CDATA[ 
]]></script></html> 

Si et lorsque je retire la notation DOCTYPE du document XML, œuvres CDATA La double barre oblique proprement et avant/arrière n'est pas transformée en CDATA.

Quel est le problème ici? Bug dans libxml2? La version de PHP est 5.2.13 sur Linux. Merci.

+0

libxml2 2.6.32, PHP 5.3.0, Ubuntu 9.04, je vois la bonne sortie. J'ai vérifié la base de données de bogues pour libxml2 et n'ai trouvé aucun bogue correspondant à cette description. Vous pouvez le vérifier vous-même et, si nécessaire, soumettre un rapport de bogue. Vous devez d'abord vérifier qu'il s'agit bien de la faute de libxml2. Ne pas exclure que c'est quelque chose avec PHP. – erisco

+0

Impossible de reproduire sur PHP 5.3/libxml 2.7.7 –

+0

Est-il possible que le saut de ligne entre le

0

Vous devriez utiliser la version HTML de l'API.
Utilisez à la place loadHTML et saveHTML.