示例#1
0
文件: valider_xml.php 项目: spip/SPIP
/**
 * 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);
}
示例#2
0
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);
}