Recherche

La syntaxe heredoc en PHP Envoyer
Programmation et tuning - Programmation Web
Écrit par Neamar   
Dimanche, 18 Octobre 2009 20:13

Et voilà que vous avez un long texte récupéré dans des circonstances assez louches à mettre dans une variable PHP pour le traiter (qui sait ? preg_replace_callback, diff, levenshtein, ... les raisons sont multiples et ne nous concernent pas forcément).

Le problème, c'est que votre texte est bourré de ' et ".
Attendez avant de vouloir échapper chacun de ces caractères ! Vous pouvez faire plus simple.

La solution s'appelle la syntaxe Heredoc ; elle va vous permettre de récupérer le texte sans soucis.
Il s'agit d'une sorte d'équivalent PHP du <![CDATA[ XML.

Il faut tout d'abord choisir un identifieur, qui permettra de signaler au parseur le début et la fin de votre texte. N'importe quelle chaîne fera l'affaire, le plus souvent on choisit EOF.
Cette chaine doit être précédée de trois chevrons gauches : <<<.
Pour marquer le début de votre texte, vous ferez donc :

<?php
$MonTresLongTexte=<<<EOF
Mon très long texte vient ici...
Et ici aussi...
Et ainsi de suite...
EOF;
 

Pour indiquer la fin, il va falloir marquer à nouveau le littéral choisi (EOF ici) et lui ajouter un point virgule (comme toute instruction PHP).
Attention cependant, il y a une astuce : votre littéral doit être placé en début de ligne. Impossible donc de le mettre directement à la fin du texte, ou d'avoir une indentation dessus.

Petit exemple pour comprendre :

<?php
$MonTresLongTexte=<<<EOF 
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aliquam ac turpis libero, ac laoreet magna
Curabitur posuere posuere vestibulum.
Curabitur arcu lacus, vulputate quis lobortis ut, consectetur id velit.
Fusce rhoncus metus vestibulum nulla blandit id iaculis augue cursus.
Praesent ultrices suscipit odio, ut tincidunt diam blandit vitae.
Sed accumsan dolor cursus justo congue quis dictum elit hendrerit.
Cras quis tellus ipsum.
Quisque vehicula erat tristique mi molestie lobortis.
Donec lacinia auctor semper.
Aliquam aliquet arcu nec dolor feugiat blandit.
In hac habitasse platea dictumst.
Aenean est est, vulputate non iaculis vitae, rhoncus in nisi.
Vivamus faucibus odio et orci placerat mollis.
In vitae felis massa.
Nulla nec nisl vel est bibendum aliquam in quis nisl.
Morbi et augue sem.
Praesent eget dui arcu, eget facilisis magna.
Aliquam nisi risus, euismod imperdiet sodales nec, gravida non neque.
Aliquam ac tortor quis urna volutpat imperdiet sit amet et tortor.
 
Les ' et " sont correctement échappés sans avoir à se fatiguer, cool non ?
Les $maVariable sont remplacés par la variable (comme dans une chaine entre guillemets ""), voir la suite pour éviter ce comportement.
EOF;

Notons aussi l'existence de la syntaxe nowdoc, qui est à heredoc ce que ' est à " : une chaine complètement imparsée.
Autrement dit, vos $variable resteront $variable et ne seront pas remplacés par le contenu de la variable. Pour l'utiliser, il suffit d'entourer d'apostrophes le littéral de début de chaîne (pas celui de fin) :

<?php
$MonTresLongTexte=<<<'EOF' 
Les ' et " sont correctement échappés sans avoir à se fatiguer, cool non ?
Les $maVariable ne seront PAS remplacés.
EOF;

Il reste un dernier souci : le support pour nowdoc est assez récent (PHP 5.3.0) et il se peut que votre serveur ne l'inclue pas encore (il suffit de voir sur cette page, même GesHi qui est censé colorer le code a des soucis). Alors, à vos màj !
Pour les autres, il reste toujours la méthode "je mets tout dans un fichier et je lis avec file_get_contents()).

Mise à jour le Dimanche, 18 Octobre 2009 21:11
 

Ajouter votre commentaire

Votre nom:
Votre site web:
Sujet:
Commentaire (vous pouvez utiliser de balises HTML ici):
  Code de vérification. Lettres minuscules seulement et sans espace.
Code de vérification: