Howto : Html::decode() pour retirer le balisage HTML

howto

J’utilise parfois du code HTML dans les titres de mes articles pour indiquer un changement de langue ou masquer un emoji décoratif aux lecteurs d’écran.

J’apprécie énormément la flexibilité de Kirby pour ça !

Ainsi pour le précédent article :

<span lang="en">Howto</span> : 
Prism pour la coloration syntaxique
<span aria-hidden="true"> 🎨</span>

Le problème, c’est qu’évidemment par défaut le titre de la page <title> reprenait le code HTML… Pire, je m’en suis aperçue, toute honteuse, après avoir partagé l’article.

J’ai regardé si je pouvais rapidement remédier au problème et supprimer toutes les balises HTML du titre de la page.

Supprimer du balisage HTML est un besoin fréquent, j’étais donc plutôt confiante sur le fait qu’il existait sans doute une fonction prête à l'emploi.

Et en effet, Kirby prévoit bien une méthode pour ça : Html::decode().

Un exemple concret n’aurait pas été en trop, il m’a fallu plusieurs essais infructueux avant de comprendre comment l’utiliser en lisant la documentation de strip_tags, une méthode similaire en PHP.

La solution est comme souvent toute bête une fois trouvée :

<?= html::decode($page->title()) ?>

En rédigeant cet article, j’ai également découvert une autre méthode, Str::unhtml(), qui fonctionne exactement sur le même principe.

Comme il semble un peu plus complexe de supprimer les emojis, je les ai retiré momentanément des titres de mes articles. Tant que je ne peux pas empêcher qu'ils soient repris dans la balise <title>, je ne les utiliserai plus.

J’ajoute dans ma to-do de créer une fonction qui supprimerait les emoji d’une chaîne de caractères.