©
. Document créé le 27 février 2008 , mis à jour le 28 février 2008.Aucune route n'est longue à côté d'un ami. Proverbe japonais
Accueil du site > Astuces > SPIP > Code PHP colorisé conforme XHTML strict
La fonction PHP highlight_string() renvoie une version colorisée d’un script PHP, bien agréable pour un site comme Quesaco qui propose parfois quelques extraits de codes.
Malheureusement, en PHP 4, le résultat est loin d’être conforme XHTML strict.
Voici un bout de code à ajouter dans le fichier mes_options.php.
Ensuite, dans la boite d’édition, il suffit de placer un code PHP d’exemple, en le faisant commencer par < ?php et terminer par ?>.
N’enveloppez pas votre extrait de code par la balise <code></code>.
Ce code déclare la fonction apres_propre() qui est automatiquement prise en charge par SPIP.
Uniquement activé pour PHP version < 5, ce code cherche dans le texte en cours une portion de code PHP et remplace toutes les occurences de « <font color="# ??????"></font> » en « <span style="color :# ??????"></span> ».
<?php
if(version_compare(PHP_VERSION, "5", "<")) {
function apres_propre($texte) {
$debut_base64 = "<p class=\"spip\"><span "
. "class=\"base64\" title='";
$fin_base64 = "' ></span></p>";
if(preg_match(','.$debut_base64.',', $texte)) {
if(!function_exists('_xhtml_strict')) {
function _xhtml_strict($matches) {
$debut_code_php = ",^<"."code>"
. "<font color=\"#000000\">\n"
. "<font color=\"#[[:digit:]ABCDEF]{6}\"><[?]php,";
$fin_code_php = ",[?]></font>\n</font>\n</"."code>$,";
$result = base64_decode($matches[2]);
if(strlen($result)
&& preg_match(
// est-ce bien du code PHP ?
$debut_code_php
, $result)
&& preg_match(
$fin_code_php
, $result)
) {
$result = preg_replace(
array(
',^(<'.'code'.'>),'
, ',(</'.'code'.'>)$,'
, ',^(<font color=\"#000000\">\n),'
, ',(</font>)$,'
, ',(<font color=\"#)'
.'([[:digit:]ABCDEF]{6})(\">)(.*)(</font>),UisS'
)
, array('','','',''
, '<span style=\'color:#${2}\'>${4}</span>'
)
, $result
);
// envelopper le paquet
$result = "<"."code class='code_php'>"
. "$result</code>";
$result = base64_encode($result);
} else {
$result = $matches[2];
}
return($matches[1].$result.$matches[3]);
}
} // end !function_exists()
// cherche le paragraphe en base64
$texte = preg_replace_callback(
',('.$debut_base64.')(.*)('.$fin_base64.'),'
, "_xhtml_strict"
, $texte);
return($texte);
}
return($texte);
}
/**/
}
?>
A tout hasard, le fichier compressé (ne pas remplacer votre fichier mes_options.php s’il existe, mais rajoutez le code) :
Les forums sont fermés.