Les chaînes de caractères sont des séquences de caractères de un octet (256 caractères possibles). PHP n'a pas encore de support natif d'Unicode.
Les chaînes de caractères sont avec les tableaux un des types de données le plus manipulé dans les scripts.
Il faut savoir utiliser les bons guillemets (simples ou doubles) suivant les traitements que l'on veut faire ou ne pas faire sur une chaîne.

Il y a 3 façons pour inclure une chaîne de caractères comme valeur littérale dans un script :

- entourer la chaîne avec des guillemets simples
- entourer la chaîne avec des guillemets doubles
- utiliser la syntaxe heredoc

Chacune des solutions différe dans la façon dont elle gére les caractères spéciaux et l'interpolation de variables.

### Les guillemets simples

C'est la façon la plus simple et la moins "coûteuse" pour entourer une chaîne de caractères.

Exemple :

    $hello = 'Bonjour tout le monde';

Pour inclure un guillemet simple dans la chaîne (apostrophe), nous devons le protéger (ou l'échapper) avec un backslash (\).

Exemple :

    $hello = 'Bonjour tout l\'monde';

Si un backslash doit apparaître dans la chaîne nous devons le doubler pour le protéger. Il n'est pas possible d'échapper d'autres caractères que l'apostrophe et le backslash dans une chaînes entourées de guillemets simples, et un backslash placé devant n'importe quel autre caractère sera considéré tout simplement comme un backslash.

### Les guillemets doubles

Une chaîne de caractères peut être entourée avec des guillemets doubles.

Exemple :

    $hello = "Bonjour tout le monde";

La différence entre les guillemets doubles et simples est importante car dans les chaînes entourées de guillemets doubles :

- les variables sont remplacées par leur valeur,
- les séquences d'échappement sont interprétées.

Par exemple, dans le code suivant :

    $prenom = 'François';
    $nom = 'Piat';
    $personne = "$prenom $nom";

la variable $personne contiendra la chaîne de caractère François Piat.

Les séquences d'échappement suivante sont interprétée :

\n
  : provoque un passage à une nouvelle ligne (linefeed, LF ou 0x0A (10) en ASCII)
\r
  : provoque un retour à la ligne(carriage return, CR ou 0x0D (13) en ASCII)
\t
  : provoque une tabulation horizontale (HT ou 0x09 (9) en ASCII)
\\
  : permet d'afficher un backslash
\$
  : permet d'afficher un caractère $ dans une chaîne entourée par des guillemets doubles
\"
  : permet d'afficher un guillemet double dans une chaîne entourée par des guillemets doubles
\{
  : permet d'afficher un accolade ouvrante entourée par des guillemets doubles
\}
  : permet d'afficher un accolade fermante entourée par des guillemets doubles
\[
  : permet d'afficher un crochet ouvrant entourée par des guillemets doubles
\]
  : permet d'afficher un crochet fermant entourée par des guillemets doubles

Exemple : guillemets simples et guillemets doubles
<?php require('bib_fonctions.php'); htmlDebut('guillemets simples et doubles'); echo '<h4>Chaîne sans complication</h4>'; echo 'Simple : Bonjour tout le monde'; echo "<br>Double : Bonjour tout le monde"; echo '<h4>Chaîne avec apostrophe</h4>'; echo 'Simple : Bonjour tout l\'monde'; echo "<br>Double : Bonjour tout l'monde"; echo '<h4>Chaîne avec guillemets doubles</h4>'; echo 'Simple : "Bonjour tout le monde"'; echo "<br>Double : \"Bonjour tout le monde\""; echo '<h4>Chaîne avec un backslash</h4>'; echo 'Simple : Le caractère \\ doit être protégé'; echo "<br>Double : Le caractère \\ doit être protégé"; echo '<h4>Séquence d\'échappement : saut de ligne</h4>'; echo '<pre>'; echo 'Simple : \n est sans effet ici'; echo "<br>Double : \n \\n est\ninterprété\nici"; echo '</pre>'; echo '<h4>Chaîne avec une variable</h4>'; $x = 'François'; echo 'Simple : je m\'appelle $x Piat'; echo "<br>Double : je m'appelle $x Piat"; htmlFin(); ?>

### La syntaxe heredoc

La syntaxe heredoc commence par <<<, suivi d'un identifiant arbitraire, puis de la chaîne de caractères. La séquence se termine par l'identifiant initial, placé en premier sur une nouvelle ligne.

L'identifiant utilisé doit suivre les mêmes règles que les pour le nommage des variables PHP : il ne doit contenir que des caractères alpha-numériques ou _, et commencer par un caractère alphabétique ou _.

Les séquences d'échappement sont interprétées, et les variables remplacées par leur valeur. Les guillemets simples ou doubles dans la chaîne n'ont besoin d'aucune protection particulière.

Exemple : syntaxe heredoc
<?php require('bib_fonctions.php'); htmlDebut('syntaxe heredoc'); $n = 'François'; $x = <<< _Delimiteur_ Bonjour, je m'appelle "Piat", $n Piat. _Delimiteur_; echo $x; htmlFin(); ?>

La syntaxe heredoc peut être utilisée avec facilité pour stocker des chaînes de caractères représentant du code HTML. A l'intérieur de la chaîne, le formattage éventuel du code (saut de ligne, indentation) sera gardé lors de l'affichage du code HTML dans la page résultat, rendant ainsi le code de cette page plus facilement lisible. Les guillemets (simples ou doubles) employés pour entourer les valeurs des attributs ne poseront pas de problème de protection.

Exemple : syntaxe heredoc
<?php require('bib_fonctions.php'); htmlDebut('synatxe heredoc'); $couleur = '#FFFFBD'; $html = <<< _HTML_ <table border="0" width="60%" align="center""> <tr> <td bgcolor="$couleur"> <p>Formation PHP</p> </td> </tr> <tr> <td> <p>La syntaxe heredoc peut être utilisée avec facilité pour stocker des chaînes de caractères représentant du code HTML.</p> </td> </tr> <tr> <td> <p><a href="javascript:alert('Message javascript')"> Lien javascript</a></p> </td> </tr> </table> _HTML_; echo $html; htmlFin(); ?>

La syntaxe heredoc est plus coûteuse à traiter que les autres façons d'inclure des chaînes comme valeur littérale dans les scripts. A mon avis elle doit être évitée si possible.

### Saut de ligne

Toutes les syntaxes (guillemets simples ou doubles, et heredoc) permettent de mettre des sauts de lignes dans les chaînes de caractères.

Exemple : sauts de ligne
<?php require('bib_fonctions.php'); htmlDebut('Sauts de ligne'); $n = 'Piat'; //--------------------------------------------------------- // Guillemets simples $x = 'Bonjour. Je m\'appelle : François Piat.'; echo "<pre>$x</pre>"; //--------------------------------------------------------- // Guillemets doubles $x = "Bonjour. Je m'appelle : François $n."; echo "<pre>$x</pre>"; //--------------------------------------------------------- // syntaxe heredoc $x = <<< texte_hd Bonjour. Je m'appelle : François $n. texte_hd; echo "<pre>$x</pre>"; htmlFin(); ?>