Valider e11b28be rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Correction d'une Fatale Suite à 27e4f1bc. C'est sport mais le commit ajoute...

Correction d'une Fatale Suite à 27e4f1bc. C'est sport mais le commit ajoute des accents dans le squelettes prive/squelettes/inclure/head.
Spip cherche alors à connaître le charset du squelette vu que ce n'est pas de l'iso (dans transcoder_page()).
Cette fonction utilise différentes techniques dont utiliser la balise `<meta charset...>`. Mais charset vaut dans le squelette `#CONFIG{charset}`
et ça tentait d'utiliser `config` comme nom de charset du coup. Pour être prudent, on exclu toute présence du caractère '#' dans le charset trouvé.
parent 9265c8de
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+19 −24
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -998,34 +998,29 @@ function transcoder_page($texte, $headers = '') {
		return $texte;
	}

	// Reconnaitre le BOM utf-8 (0xEFBBBF)
	if (bom_utf8($texte)) {
		// Reconnaitre le BOM utf-8 (0xEFBBBF)
		$charset = 'utf-8';
		$texte = substr($texte, 3);
	} // charset precise par le contenu (xml)
	else {
		if (preg_match(
			',<[?]xml[^>]*encoding[^>]*=[^>]*([-_a-z0-9]+?),UimsS', $texte, $regs)) {
	} elseif (preg_match(',<[?]xml[^>]*encoding[^>]*=[^>]*([-_a-z0-9]+?),UimsS', $texte, $regs)) {
		// charset precise par le contenu (xml)
		$charset = trim(strtolower($regs[1]));
		} // charset precise par le contenu (html)
		else {
			if (preg_match(
					',<(meta|html|body)[^>]*charset[^>]*=[^>]*([-_a-z0-9]+?),UimsS',
					$texte, $regs)
				# eviter #CHARSET des squelettes
				and (($tmp = trim(strtolower($regs[2]))) != 'charset')
	} elseif (
		// charset precise par le contenu (html)
		preg_match(',<(meta|html|body)[^>]*charset[^>]*=[^>]*([#-_a-z0-9]+?),UimsS', $texte, $regs)
		# eviter toute balise SPIP tel que #CHARSET ou #CONFIG d'un squelette
		and false === strpos($regs[2], '#')
		and $tmp = trim(strtolower($regs[2]))
	) {
		$charset = $tmp;
			} // charset de la reponse http
			else {
				if (preg_match(',charset=([-_a-z0-9]+),i', $headers, $regs)) {
	} elseif (preg_match(',charset=([-_a-z0-9]+),i', $headers, $regs)) {
		// charset de la reponse http
		$charset = trim(strtolower($regs[1]));
	} else {
		$charset = '';
	}
			}
		}
	}


	// normaliser les noms du shif-jis japonais
	if (preg_match(',^(x|shift)[_-]s?jis$,i', $charset)) {
		$charset = 'shift-jis';