Traitements automatiques des balises

La plupart des balises SPIP, dont toutes celles issues de la lecture de la base de données effectuent des traitements automatiques pour bloquer des codes malveillants qui pourraient être ajoutés par des rédacteurs au moment de l’écriture de l’article (du code PHP ou des scripts JavaScript).

En plus de ces traitements, d’autres peuvent être définis pour chaque champ SQL afin de faire appliquer automatiquement les traitements sur le champ en question. Ces opérations sont définies dans le fichier ecrire/public/interfaces.php par un tableau global $table_des_traitements. La clé du tableau est le nom de la balise, la valeur un tableau associatif :

  • sa valeur pour la clé « 0 » (= le premier $table_des_traitements['BALISE'][] rencontré) définit un traitement qui concerne toutes les tables,
  • une clé « nom_de_la_table » ($table_des_traitements['BALISE']['nom_de_la_table'] sans le préfixe de table) définit un traitement pour une balise d’une table spécifique.

Les traitements sont donnés par une chaîne de caractères fonction(%s) explicitant les fonctions à appliquer. Dedans, « %s » sera remplacé par le contenu du champ.

$table_des_traitements['BALISE'][] = 'traitement(%s)';
$table_des_traitements['BALISE']['objets']= 'traitement(%s)';

Deux usages fréquents des filtres automatiques sont définis par des constantes pouvant être utilisées :

  • _TRAITEMENT_TYPO applique les traitements typographiques,
  • _TRAITEMENT_RACCOURCIS applique les traitements typographiques et les traductions des raccourcis SPIP.

Exemple

Les balises #TITRE et #TEXTE reçoivent des traitements, qui s’appliquent quelle que soit la boucle, définis de cette façon :

$table_des_traitements['TEXTE'][] = _TRAITEMENT_RACCOURCIS;
$table_des_traitements['TITRE'][] = _TRAITEMENT_TYPO;

La balise #FICHIER effectue un traitement uniquement dans les boucles documents :

$table_des_traitements['FICHIER']['documents'] = 'get_spip_doc(%s)';

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, Español, français, Nederlands