From 62b62e353407412ab421bd57fed7f7a906e85d15 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Tue, 23 Jan 2007 23:33:01 +0000 Subject: [PATCH] "un tour de passe passe avec le doctype et sax (qui le mange en php 5). la fonction sax_bug porte encore un peu mieux son nom, et se charge d'escamoter le doctype de la page, et de le renvoyer separemment, pour pouvoir le recoller en tete apres analyse. En esperant ne rien avoir casse dans les scenarii php4" --- ecrire/inc/sax.php | 22 ++++++++++++++-------- ecrire/public/debug.php | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ecrire/inc/sax.php b/ecrire/inc/sax.php index 085a7c7e37..c8da196701 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 f0c18ecbc5..c92a0272d0 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 -- GitLab