From 3aee5d86ee72a0cfac292a19aefbbf165d759021 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 27 Nov 2006 18:08:11 +0000
Subject: [PATCH] le xml-hack que tout le monde attendait; on peut donc
 desormais mettre '<?xml' dans ses squelettes

---
 dist/backend-breves.html         | 3 +--
 dist/backend.html                | 3 +--
 ecrire/exec/statistiques_svg.php | 2 +-
 ecrire/public.php                | 7 +++++++
 ecrire/public/compiler.php       | 3 +++
 5 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dist/backend-breves.html b/dist/backend-breves.html
index 969e19d172..87b57e8fad 100644
--- a/dist/backend-breves.html
+++ b/dist/backend-breves.html
@@ -1,6 +1,5 @@
 #CACHE{3600}
-[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]
-<?php echo '<' ?>?xml version="1.0"[ encoding="(#CHARSET)"]?>
+<?xml version="1.0"[ encoding="(#CHARSET)"]?>
 <rss version="2.0"
 	xmlns:dc="http://purl.org/dc/elements/1.1/"
 	xmlns:content="http://purl.org/rss/1.0/modules/content/"
diff --git a/dist/backend.html b/dist/backend.html
index 69b9dda73c..51cc479f95 100644
--- a/dist/backend.html
+++ b/dist/backend.html
@@ -1,6 +1,5 @@
 #CACHE{3600}
-[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]
-<?php echo '<' ?>?xml version="1.0"[ encoding="(#CHARSET)"]?>
+<?xml version="1.0"[ encoding="(#CHARSET)"]?>
 <rss version="2.0"
 	xmlns:dc="http://purl.org/dc/elements/1.1/"
 	xmlns:content="http://purl.org/rss/1.0/modules/content/"
diff --git a/ecrire/exec/statistiques_svg.php b/ecrire/exec/statistiques_svg.php
index 17d90c2292..f35fe509f2 100644
--- a/ecrire/exec/statistiques_svg.php
+++ b/ecrire/exec/statistiques_svg.php
@@ -49,7 +49,7 @@ if ($connect_statut != '0minirezo') {
 	header("Expires: ".$expire." GMT");
 	header("Content-type: image/svg+xml");
 
-	echo "<?xml version=\"1.0\" standalone=\"no\"?>\n";
+	echo "<"."?xml version=\"1.0\" standalone=\"no\"?>\n";
 	echo "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n";
 	echo "<svg  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"450\" height=\"310\" x=\"0\" y=\"0\">\n";
 	echo "<style type='text/css'>\n";
diff --git a/ecrire/public.php b/ecrire/public.php
index 78255e540d..966ebe06ff 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -122,6 +122,10 @@ if (defined('_INC_PUBLIC')) {
 
 	// Execution de la page calculee
 
+	// 0. xml-hack
+	$xml_hack = ($page['entetes']['X-Xml-Hack'] == 'ok');
+	unset($page['entetes']['X-Xml-Hack']);
+
 	// 1. Cas d'une page contenant uniquement du HTML :
 	if ($page['process_ins'] == 'html') {
 		foreach($page['entetes'] as $k => $v) @header("$k: $v");
@@ -193,6 +197,9 @@ if (defined('_INC_PUBLIC')) {
 			$page['texte'] = $r[1];
 	}
 
+	// Report du hack pour <?xml (cf. public/compiler.php)
+	if ($xml_hack)
+		$page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']);
 
 	// (c'est ici qu'on fait var_recherche, tidy, boutons d'admin,
 	// cf. public/assembler.php)
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 793bbd7f53..c89d790f62 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -660,6 +660,9 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
 	include_spip('inc/charsets');
 	$squelette = transcoder_page($squelette);
 
+	// Hacke un eventuel tag xml "<?xml" pour qu'il ne soit pas traite comme php
+	$squelette = str_replace('<'.'?xml', "#HTTP_HEADER{X-Xml-Hack: ok}[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]<\1?xml", $squelette);
+
 	// Phraser le squelette, selon sa grammaire
 	// pour le moment: "html" seul connu (HTML+balises BOUCLE)
 	$boucles = array();
-- 
GitLab