/** * Essayer de valider un texte même sans Doctype * à moins qu'un Content-Type dise clairement que ce n'est pas du XML * * @param string $transformer_xml * @param string $file * @param string $dir * @param string $ext * @return array */ function valider_skel($transformer_xml, $file, $dir, $ext) { if (!lire_fichier($file, $text)) { return array('/', '/', $file, ''); } if (!strpos($text, 'DOCTYPE')) { preg_match(",Content[-]Type: *\\w+/(\\S)+,", $text, $r); if ($r[1] === 'css' or $r[1] === 'plain') { return array('/', 'DOCTYPE?', $file, ''); } } if ($ext != 'html') { // validation d'un non squelette $page = array('texte' => $text); $url = url_de_base() . _DIR_RESTREINT_ABS . $file; $script = $file; } else { $script = basename($file, '.html'); // pas de validation solitaire pour les squelettes internes, a revoir. if (substr_count($dir, '/') <= 1) { $url = generer_url_public($script, $contexte); } else { $url = ''; } $composer = charger_fonction('composer', 'public'); list($skel_nom, $skel_code) = $composer($text, 'html', 'html', $file); spip_log("compilation de {$file} en " . strlen($skel_code) . " octets de nom {$skel_nom}"); if (!$skel_nom) { return array('/', '/', $file, ''); } $contexte = valider_contexte($skel_code, $file); $page = $skel_nom(array('cache' => ''), array($contexte)); } $res = $transformer_xml($page['texte']); return array(count($res->err), strlen($res->page), $res->err, $script, $url); }
function valider_skel($transformer_xml, $file, $dir, $ext) { if (!lire_fichier ($file, $text)) return array('/', '/', $file,''); if (!strpos($text, 'DOCTYPE')) { preg_match(",Content[-]Type:\s*[^/]+/([^ ;]+),", $text, $r); if ($r[1] === 'css' OR $r[1] === 'plain') return array(0, array(), $file,''); } if ($ext != 'html') { // validation d'un non squelette $page = array('texte' => $text); $url = url_de_base() . _DIR_RESTREINT_ABS . $file; $script = $file; } else { $script = basename($file,'.html'); // les squelettes en sous-repertoire sont problematiques, // traitons au moins le cas prive/exec if (substr_count($dir, '/') <= 1) { $url = generer_url_public($script, $contexte); } else $url = valider_pseudo_url(basename($dir), basename($file, '.html'), $contexte); $composer = charger_fonction('composer', 'public'); list($skel_nom, $skel_code) = $composer($text, 'html', 'html', $file); spip_log("compilation de $file en " . strlen($skel_code) . " octets de nom $skel_nom"); if (!$skel_nom) return array('/', 0, $file,''); $contexte = valider_contexte($skel_code, $file); $page = $skel_nom(array('cache'=>''), array($contexte)); } list($texte, $err) = $transformer_xml($page['texte']); return array($texte, $err, $script, $url); }