Skip to content
Extraits de code Groupes Projets
Valider 5f94d9f6 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

importer le charset du fichier xml, et $strict pour ignorer silencieusement...

importer le charset du fichier xml, et $strict pour ignorer silencieusement les tag errones dans un import
parent 09145128
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return; if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@spip_xml_load // http://doc.spip.org/@spip_xml_load
function spip_xml_load($fichier, $clean=true){ function spip_xml_load($fichier, $strict=true, $clean=true){
$contenu = ""; $contenu = "";
if (preg_match(",^(http|ftp)://,",$fichier)){ if (preg_match(",^(http|ftp)://,",$fichier)){
include_spip('inc_distant'); include_spip('inc_distant');
...@@ -22,18 +22,25 @@ function spip_xml_load($fichier, $clean=true){ ...@@ -22,18 +22,25 @@ function spip_xml_load($fichier, $clean=true){
else lire_fichier ($fichier, $contenu); else lire_fichier ($fichier, $contenu);
$arbre = array(); $arbre = array();
if ($contenu) if ($contenu)
$arbre = spip_xml_parse($contenu); $arbre = spip_xml_parse($contenu, $strict, $clean);
return count($arbre)?$arbre:false; return count($arbre)?$arbre:false;
} }
// http://doc.spip.org/@spip_xml_parse // http://doc.spip.org/@spip_xml_parse
function spip_xml_parse($texte, $clean=true){ function spip_xml_parse($texte, $strict=true, $clean=true){
$out = array(); $out = array();
// enlever les commentaires // enlever les commentaires
if ($clean){ if ($clean){
$charset = 'AUTO';
if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im",$texte,$regs))
$charset = $regs[2];
var_dump($regs);
var_dump($charset);
$texte = preg_replace(',<!--(.*?)-->,is','',$texte); $texte = preg_replace(',<!--(.*?)-->,is','',$texte);
$texte = preg_replace(',<\?(.*?)\?>,is','',$texte); $texte = preg_replace(',<\?(.*?)\?>,is','',$texte);
include_spip('inc/charsets');
$texte = importer_charset($texte,$charset);
} }
$txt = $texte; $txt = $texte;
...@@ -62,15 +69,18 @@ function spip_xml_parse($texte, $clean=true){ ...@@ -62,15 +69,18 @@ function spip_xml_parse($texte, $clean=true){
// tag fermant // tag fermant
$chars = preg_split("{(</".preg_quote($closing_tag).">)}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE); $chars = preg_split("{(</".preg_quote($closing_tag).">)}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
if (!isset($chars[1])) { // tag fermant manquant if (!isset($chars[1])) { // tag fermant manquant
$out[$tag][]="erreur : tag fermant $tag manquant::$txt"; if ($strict){
return $out; $out[$tag][]="erreur : tag fermant $tag manquant::$txt";
return $out;
}
else return $texte; // un tag qui constitue du texte a reporter dans $before
} }
$content = $chars[0]; $content = $chars[0];
$txt = trim($chars[2]); $txt = trim($chars[2]);
if (strpos($content,"<")===FALSE) // eviter une recursion si pas utile if (strpos($content,"<")===FALSE) // eviter une recursion si pas utile
$out[$tag][] = $content; $out[$tag][] = $content;
else else
$out[$tag][]=spip_xml_parse($content, false); $out[$tag][]=spip_xml_parse($content, $strict, false);
} }
$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE); $chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter