Skip to content

Tout pour WordPress, le développement web — et plus encore

HTML en PHP : echo, heredoc, nowdoc et sortie de PHP

HTML en PHP : echo, heredoc, nowdoc et sortie de PHP

Collez un balisage tout prêt : vous obtenez cinq façons de le placer dans un fichier PHP, chacune avec l'échappement qui convient. Tout s'exécute dans votre navigateur : le balisage n'est envoyé nulle part et n'est jamais conservé.

Déposez ici un fichier .html — il est lu localement.
Traitement du balisage

Ce qui se rapproche le plus de ce que produit codebeautify, mais avec échappement : sans lui, la moindre apostrophe dans le balisage casse la chaîne PHP.

Collez du HTML ci-dessus — le code PHP apparaîtra ici.

Le balisage ne quitte pas votre navigateur : la conversion s'exécute localement, sans rien envoyer à un serveur.

Cinq méthodes et quand chacune convient

echo ligne par ligne — une ligne après l'autre, chacune dans son propre appel. L'aspect le plus familier, pratique quand il faut glisser une condition ou une boucle entre les lignes. nowdoc — un bloc dans lequel PHP n'interprète rien : ni séquences d'échappement, ni variables. Le balisage se retrouve octet pour octet dans le code et n'a besoin d'aucun échappement. C'est la façon la plus sûre de déplacer du HTML venu d'ailleurs. heredoc — le même bloc, mais avec des variables : $title y sera substitué. C'est pourquoi le dollar et la barre oblique inverse sont échappés, mais pas les guillemets. Chaîne dans une variable — le balisage est rassemblé dans $html par concaténation. Nécessaire quand il faut le renvoyer depuis une fonction ou le transmettre à un moteur de gabarits plutôt que l'afficher tout de suite. Sortie de PHP — fermer la balise et livrer le balisage tel quel. C'est exactement ce que recommande la documentation PHP : aucun échappement, aucun coût de collage de chaînes, et la coloration syntaxique de l'éditeur continue de fonctionner. La balise fermante ?> est volontairement absente du code généré. Tout caractère qui la suit — même un saut de ligne involontaire en fin de fichier — arrive dans la sortie et provoque le classique « headers already sent ».

Pourquoi les convertisseurs sans échappement produisent du code inutilisable

Le convertisseur HTML vers PHP le plus répandu en ligne fait exactement une chose : il découpe le texte en lignes et colle echo '<ligne>';. Aucun remplacement de caractères, et cela se voit dès le premier vrai morceau de balisage. Un attribut entre guillemets simples — <a href='/price'> — ferme la chaîne PHP au milieu du texte. Suit une erreur de syntaxe. Une barre oblique inverse en fin de ligne avale le guillemet fermant et colle deux lignes en une. Un signe dollar entre guillemets doubles ou dans un heredoc transforme $total en valeur vide. trim() sur chaque ligne rogne en silence l'indentation à l'intérieur de pre, textarea et code : ce que voit le visiteur sur la page change. Toutes les lignes sont collées sans saut, si bien que le HTML obtenu devient une seule ligne interminable. Ici chacun de ces cas est traité, et l'étiquette du heredoc est choisie de façon à ne coïncider avec aucune ligne de votre balisage : sinon le bloc se refermerait au milieu.

Questions fréquentes