Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

wp_strip_all_tags contre strip_tags natif : la nuance qui évite un espace perdu

Retirer les balises d'un contenu structuré avec la fonction PHP native colle parfois deux mots qui devraient rester séparés. WordPress corrige ce détail.

Par WordPress Développement • 1 février 2024 • 4 min de lecture • Aucun commentaire
wp_strip_all_tags contre strip_tags natif : la nuance qui évite un espace perdu
Aspectstrip_tags() natifwp_strip_all_tags()
OrigineFonction native de PHPFonction propre à WordPress
Gestion des espacesAucune, retire les balises telles quellesAjoute un espace avant de retirer certaines balises de bloc
Nettoyage préalableAucunRetire aussi le contenu des balises <script> et <style>
Usage recommandéCas simples, chaîne sans structure de blocContenu éditorial structuré en paragraphes, titres, listes

strip_tags( '<p>Premier paragraphe.</p><p>Second paragraphe.</p>' ) renvoie Premier paragraphe.Second paragraphe., deux phrases collées l’une à l’autre sans le moindre espace entre elles. Le résultat reste syntaxiquement correct du point de vue de PHP, mais devient illisible dès qu’on l’affiche tel quel dans un extrait ou une méta-description.

Ce comportement n’a rien d’un bug : strip_tags() ne fait strictement que retirer les balises HTML d’une chaîne, sans jamais se préoccuper de la mise en forme du texte qui en résulte. La fonction native de PHP n’a d’ailleurs aucune connaissance du contexte éditorial dans lequel elle est appelée.

Ce que corrige wp_strip_all_tags()

WordPress fournit sa propre fonction, wp_strip_all_tags(), qui règle précisément ce défaut. Avant de retirer les balises, elle remplace certaines d’entre elles par un espace, de façon à préserver la séparation naturelle entre deux blocs de texte qui suivaient des balises structurantes :

$html = '<p>Premier paragraphe.</p><p>Second paragraphe.</p>';

echo strip_tags( $html );
// Premier paragraphe.Second paragraphe.

echo wp_strip_all_tags( $html );
// Premier paragraphe. Second paragraphe.

Le second argument, souvent ignoré

L'essentiel à retenir : strip_tags() retire les balises sans se soucier des espaces perdus ; wp_strip_all_tags() insère un espace avant de retirer certaines balises de bloc ; La différence se voit surtout sur du contenu structuré en paragraphes ou titres

wp_strip_all_tags() accepte un second paramètre booléen, $remove_breaks, qui contrôle si les retours à la ligne restants doivent aussi être retirés après le nettoyage des balises :

$texte = wp_strip_all_tags( $html, true );
// Les retours à la ligne éventuels sont également supprimés,
// utile pour un affichage sur une seule ligne (méta-description, aperçu).

Par défaut, ce paramètre vaut false : les retours à la ligne présents dans le contenu original sont conservés tels quels après le retrait des balises. Pour un extrait affiché sur plusieurs lignes, cette valeur par défaut convient généralement bien.

Retrait du contenu des scripts et styles

Autre différence notable : wp_strip_all_tags() retire non seulement les balises <script> et <style>, mais aussi tout leur contenu interne, avant d’appliquer le nettoyage général. strip_tags() natif, lui, retire uniquement les balises elles-mêmes et laisse leur contenu texte intact, ce qui peut faire fuiter du code JavaScript ou CSS brut dans un extrait censé n’afficher que du texte lisible :

$contenu = '<p>Texte visible.</p><script>alert("test");</script>';

echo strip_tags( $contenu );
// Texte visible.alert("test");

echo wp_strip_all_tags( $contenu );
// Texte visible.

Cette différence a un impact direct sur la sécurité de l’affichage : un extrait généré avec strip_tags() natif à partir d’un contenu contenant un script malveillant injecté laisserait passer le code du script en clair, sous forme de texte, alors que wp_strip_all_tags() l’élimine dès le nettoyage.

Un usage typique : générer une méta-description

function meta_description_depuis_contenu( $post_id ) {
    $post    = get_post( $post_id );
    $extrait = wp_strip_all_tags( $post->post_content, true );

    return wp_trim_words( $extrait, 30 );
}

Cette combinaison — nettoyage complet des balises, puis découpe sur un nombre de mots avec wp_trim_words() — reste la façon la plus fiable de générer une description courte à partir d’un contenu structuré en blocs, sans risquer de coller deux idées qui n’ont rien à voir l’une avec l’autre.

Quand strip_tags() natif reste suffisant

  • Sur une chaîne courte, sans structure de blocs (un simple <strong> autour d’un mot, par exemple).
  • Dans du code générique indépendant de WordPress, destiné à être réutilisé hors de son contexte.
  • Quand la performance est critique sur un très grand volume de chaînes à traiter, strip_tags() natif reste légèrement plus rapide faute de traitement additionnel.

Sur tout contenu éditorial structuré en paragraphes ou en titres, préférer systématiquement wp_strip_all_tags() évite la mauvaise surprise du texte collé, découverte trop souvent seulement après publication.

Notre verdict

La différence semble mineure sur le papier, mais elle change concrètement la lisibilité d’un extrait généré automatiquement. Pour tout contenu WordPress structuré en blocs, wp_strip_all_tags() reste le choix par défaut le plus sûr, avec en prime un nettoyage plus complet des scripts embarqués.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi