Chaînes de caractères

Créer une chaîne de caractère

Simples quotes

Les caractères délimités par des simples quotes ' ne sont pas interprétés.

<?php
$var = 'Prix: 0.20$';

Caractères à échapper: '.
Pour que la chaîne contienne une quote, l’échapper par un antislash \.

Doubles quotes

Les caractères délimités par des doubles quotes " sont interprétés : les variables et séquences d’échappement telles que \n et \t sont remplacés par leur valeur.

<?php
$val = 0.20;
$var = "Prix: $val\$";

Caractères à échapper: ", $, séquences d’échappement.
Comme pour les simples quotes, échapper les caractères par un antislash \ pour éviter qu’ils soient interprétés.

Heredoc

Même principe que les double quotes: les variables et séquences d’échappement sont remplacés par leur valeur, cependant il n’est pas nécessaire n’échapper les double quotes.

<?php
$var = <<<HEREDOC
text\n
HEREDOC;
 <?php
$var = <<<"HEREDOC"
text\n
HEREDOC;

Il est possible de mettre n’importe quel mot-clé à la place de “HEREDOC”, pourvu qu’il soit identique au début et à la fin. Le premier “HEREDOC” doit être directement suivit d’un retour à la ligne. Le dernier “HEREDOC” doit être seul sur la ligne et directement suivit d’un point-virgule (pas de tabulation/espace ni avant ni après !):

<?php
if(true) {
    $var = <<<"HEREDOC"
text\n
HEREDOC;
# Le HEREDOC fermant ne peut pas être indenté
}

Caractères à échapper: $, séquences d’échappement

Nowdoc

Même principe que les simple quotes, à la différence près qu’il n’est pas nécessaire d’échapper les simples quotes.
Le “NOWDOC” ouvrant est entouré de simples quotes, là où pour du heredoc on met des doubles quotes ou rien.

<?php
$var = <<<'NOWDOC'
text
NOWDOC;

Le format nowdoc obéit aux mêmes règles que heredoc, on peut utiliser n’importe quel mot-clé et il faut que les “NOWDOC” soient seuls sur la ligne.

php.net: Les chaînes de caractères


Insérer un caractère spécial

Séquence d’échappement

Lorsqu’une chaîne de caractères est entourée de doubles quotes ", PHP interprète certaines séquences d’échappement en caractères spéciaux:

<?php
$var = "Hello\n";
</tr> </tbody> </table> `\0` tout comme `\x0` correspond au caractère NUL. `\x1a` permet d'ajouter un délimiteur invisible dans le texte. [Liste des caractères invisibles](http://condor.depaul.edu/sjost/lsp121/documents/ascii-npr.htm). ### Code HTML Il est également possible d'afficher des caractères spéciaux en HTML: ``` php <?php $var = "Homepage • Monsite"; ``` | Séq. | Caractère | Code octal |--- |--- |--- | `!` | Caractère ASCII au code décimal 33 | 41 | `!` | Caractère ASCII au code hexadécimal 21 | 41 | `!` | Caractère ASCII au code HTML excl | 41 Ces caractères sont interprétés par le navigateur et non par PHP, ainsi `!` s'affichera tel que dans un shell tandis qu'un navigateur affichera `!`. Pour afficher `!` tel que dans un navigateur, écrire `&#33;`. ### Code ASCII Il existe diverses fonctions qui permettent de créer un caractère dont on connaît le code ASCII, décimal, hexadécimal, octal et binaire, ou inversement. ``` php <?php $var = "Hello" . chr(10); ``` * `chr` convertit un code décimal en caractère ``` php <?php echo chr(33); # Affiche "!" ``` * `ord` retourne le code décimal d'un caractère ``` php <?php echo ord("!"); # Affiche 33 ``` Pour passer par un code autre que le code décimal, utiliser les éléments de syntaxe ou fonctions de conversion de nombres. | Code | code → car. | car. → code |--- |--- |--- | Décimal | `chr(33)`,
`pack("C", 33)` | `ord("!")` | Binaire | `chr(0b100001)`,
`chr(bindec("100001"))` | `sprintf("%b", ord("!"))`,
`decbin(ord("!"))` | Octal | `chr(041)`,
`chr(octdec("41"))` | `sprintf("%o", ord("!"))`,
`decoct(ord("!"))` | Hexadécimal | `chr(0x21)`,
`chr(hexdec("21"))`,
`hex2bin("21")` | `sprintf("%x", ord("!"))`,
`dechex(ord("!"))`,
`bin2hex("!")` Ou de manière plus générale, on peut utiliser la fonction `base_convert` pour passer d'une base à l'autre. Par exemple pour passer du code octal (base 8) au code décimal (base 10): ``` php <?php base_convert($var, 8, 10); ```
Séq. Caractère Code octal Description
\n Fin de ligne 10 (Line Feed)
Fin de ligne Linux
\r Retour chariot 13 (Carriage Return)
\r\n (mnénotech.: return) marque les fins de lignes Windows
\t Tabulation 9
\v Tabulation verticale 11 Correspond au retour à la ligne à l'intérieur d'une cellule Excel
\f Saut de page 12
\e Échappement CLI 27 Ce caractère est invisible dans un navigateur. Lorsqu'un script PHP est exécuté dans un shell (Linux), ce caractère peut modifier l'affichage graphique, le mouvement du curseur ou même les touches du clavier.
<?php
echo "\e[1;31mDu texte\e\m"
# "Du texte" s'affiche en rouge dans la console

Plus d'info: [ANSI Escape sequences](http://ascii-table.com/ansi-escape-sequences.php)
\41 Caractère ASCII au code octal 41 41 ("\41" = "!")
Lis trois chiffres au maximum.
\x21 Caractère ASCII au code hexadécimal 21 41 ("\x21" = "!")