diff --git a/ecrire/inc/sax.php b/ecrire/inc/sax.php index 085a7c7e370a6ec15d68577cca35554539f189da..c8da1967013b0866dd4d8c5003c2e2c7d9b02fbb 100644 --- a/ecrire/inc/sax.php +++ b/ecrire/inc/sax.php @@ -192,15 +192,19 @@ function inc_sax_dist($page, $apply=false) ob_end_clean(); } - // charger la DTD et transcoder les entites - $res = $phraseur_xml->phraserTout($xml_parser, sax_bug($page)); + // charger la DTD et transcoder les entites, + // et escamoter le doctype que sax mange en php 5 + list($doctype,$page) = sax_bug($page); + + $res = $phraseur_xml->phraserTout($xml_parser, $page); xml_parser_free($xml_parser); - if ($res[0] == '<') return $res; + if ($res[0] == '<') return $doctype ."\n". $res; $GLOBALS['xhtml_error'] = $res; - return $page; + + return $doctype . $page; } // SAX ne dit pas si une Entite est dans un attribut ou non. @@ -214,12 +218,14 @@ function inc_sax_dist($page, $apply=false) function sax_bug($data) { global $phraseur_xml; + $doctype = ""; $r = analyser_doctype($data); if (!$r) $data = html2unicode($data, true); else { - list ($topelement, $avail, $grammaire, $rotlvl) = $r; + list ($doctype, $topelement, $avail, $grammaire, $rotlvl) = $r; + $data = substr($data,strlen($doctype)); $file = _DIR_CACHE_XML . preg_replace('/[^\w.]/','_', $rotlvl) . '.gz'; if (lire_fichier($file, $r)) $phraseur_xml->dtc = unserialize($r); @@ -236,7 +242,7 @@ function sax_bug($data) $trans["&$k;"] = $v; $data = strtr($data, $trans); } - return unicode2charset($data); + return array($doctype,unicode2charset($data)); } // http://doc.spip.org/@analyser_doctype @@ -245,7 +251,7 @@ function analyser_doctype($data) if (!preg_match(_REGEXP_DOCTYPE, $data, $r)) return array(); - list(,,$topelement, $avail,$suite) = $r; + list($doctype,,$topelement, $avail,$suite) = $r; if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) @@ -261,7 +267,7 @@ function analyser_doctype($data) return array(); $grammaire = $r[1]; } - return array($topelement, $avail, $grammaire, $rotlvl); + return array($doctype, $topelement, $avail, $grammaire, $rotlvl); } ?> diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php index f0c18ecbc5fdb3902d466bad59b473eef27ce410..c92a0272d0e5e7f702fc59775c4430f44373b6a1 100644 --- a/ecrire/public/debug.php +++ b/ecrire/public/debug.php @@ -487,7 +487,7 @@ function debug_script ($t) { debug_debut($GLOBALS['exec']); if (!isset($GLOBALS['xhtml_error'])) { - list ($top, $avail, $grammaire, $rotlvl) = analyser_doctype($t); + list (,$top, $avail, $grammaire, $rotlvl) = analyser_doctype($t); $err = '<h3>' . _T('spip_conforme_dtd') . "<br /><a href='" . $grammaire