# htmlspecialchars

(PHP 4, PHP 5, PHP 7, PHP 8)

htmlspecialchars — Convertit les caractères spéciaux en entités HTML

### Description

htmlspecialchars(
string `$string`,
int `$flags` = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string `$encoding` = `null`,
bool `$double_encode` = `true`
): string

Certains caractères ont des significations spéciales en HTML, et doivent être remplacés par des entités HTML pour conserver leurs significations. Cette fonction retourne une chaîne de caractères avec ces modifications. Si vous avez besoin que toutes les sous-chaînes en entrée qui sont associées à des entités nommées soient transformées, utilisez la fonction htmlentities().

Si la chaîne en entrée passée à cette fonction et le document final partagent le même jeu de caractères, cette fonction est suffisante pour préparer l'entrée pour une inclusion dans la plupart des contextes d'un document HTML. Si cependant, l'entrée peut présenter des caractères qui ne sont pas codés dans le jeu de caractères du document final, et que vous souhaitez épargner ces caractères (comme des numériques ou des entités nommés), cette fonction et la fonction htmlentities() (qui n'encodes que les sous-chaînes qui ont des entités nommés équivalentes) ne sont pas suffisantes. Vous devez utiliser la fonction mb_encode_numericentity() à la place.

Remplacement effectué
Caractère | Remplacement
--- | ---
`&` (ET commercial) | `&amp;`
`"` (double guillement) | `&quot;` sauf si `ENT_NOQUOTES`
`'` (simple guillemet) | `&#039;` (pour `ENT_HTML401`) ou `&apos;` (pour `ENT_XML1`, `ENT_XHTML` ou `ENT_HTML5`), mais seulement lorsque `ENT_QUOTES` est défini
`<` (inférieur à) | `&lt;`
`>` (supérieur à) | `&gt;`

### Liste de paramètres

`string`

  La chaîne à convertir.

`flags`

  Un masque bit d'un ou plusieurs drapeaux suivants, qui déterminent la façon dont les guillemets seront gérés, dont les séquences de code invalide seront gérées ainsi que le type du document utilisé. Par défaut, c'est `ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401`.

  Constantes disponibles pour `flags`
  Constante | Description
  --- | ---
  `ENT_COMPAT` | Convertit les guillemets doubles, et ignore les guillemets simples.
  `ENT_QUOTES` | Convertit les guillemets doubles et les guillemets simples.
  `ENT_NOQUOTES` | Ignore les guillemets doubles et les guillemets simples.
  `ENT_IGNORE` | Ignore les séquences de caractères invalides plutôt que de retourner une chaine vide. L'utilisation de ce drapeau est fortement déconseillé pour des » raisons de sécurité.
  `ENT_SUBSTITUTE` | Remplace les séquences de code invalide avec un caractère de remplacement Unicode U+FFFD (UTF-8) ou &#xFFFD; (sinon) au lieu de retourner une chaîne vide.
  `ENT_DISALLOWED` | Remplace les points du code invalides du document fourni avec un caractère de remplacement Unicode U+FFFD (UTF-8) ou &#xFFFD; (sinon) au lieu de le laisser tel quel. Ceci peut être utile pour, par exemple, s'assurer du bon formatage de documents XML contenant du contenu externe.
  `ENT_HTML401` | Gère le code comme étant du HTML 4.01.
  `ENT_XML1` | Gère le code comme étant du XML 1.
  `ENT_XHTML` | Gère le code comme étant du XHTML.
  `ENT_HTML5` | Gère le code comme étant du HTML 5.

`encoding`

  Un argument optionnel définissant l'encodage utilisé lors de la conversion des caractères.

  Si omis, la valeur par défaut du paramètre `encoding` est la valeur de l'option de configuration default_charset.

  Malgré le fait que cet argument soit techniquement optionnel, vous êtes vivement encouragé à spécifier la valeur correcte pour votre code si l'option de configuration default_charset a été définie de façon incorrecte pour l'entrée fournie.

  Pour cette fonction, les encodages `ISO-8859-1`, `ISO-8859-15`, `UTF-8`, `cp866`, `cp1251`, `cp1252`, et `KOI8-R` sont équivalents, à condition que le paramètre `string` soit valable pour l'encodage, dans le sens où les caractères affectés par la fonction htmlspecialchars() occupent la même position dans tous ces encodages.

  Les jeux de caractères suivants sont supportés :

  Jeux de caractères supportés
  Jeux de caractères | Alias | Description
  --- | --- | ---
  ISO-8859-1 | ISO8859-1 | Europe occidentale, Latin-1.
  ISO-8859-5 | ISO8859-5 | Jeu de caractère cyrillique rarement utilisé (Latin/Cyrillic).
  ISO-8859-15 | ISO8859-15 | Europe occidentale, Latin-9. Dispose du signe Euro, des caractères spéciaux français et finlandais, qui manquent au Latin-1 (ISO-8859-1).
  UTF-8 |  | Unicode 8 bits multioctets, compatible avec l'ASCII
  cp866 | ibm866, 866 | Jeu de caractères Cyrillique spécifique à DOS.
  cp1251 | Windows-1251, win-1251, 1251 | Jeu de caractères Cyrillic spécifique à Windows.
  cp1252 | Windows-1252, 1252 | Jeu de caractères spécifique de Windows pour l'Europe occidentale.
  KOI8-R | koi8-ru, koi8r | Russe.
  BIG5 | 950 | Chinois traditionnel, principalement utilisé à Taïwan.
  GB2312 | 936 | Chinois simplifié, officiel.
  BIG5-HKSCS |  | Big5 avec les extensions de Hong Kong, chinois traditionnel.
  Shift_JIS | SJIS, SJIS-win, cp932, 932 | Japonais
  EUC-JP | EUCJP, eucJP-win | Japonais
  MacRoman |  | Jeu de caractères utilisé par Mac OS.
  `''` |  | Une chaîne vide active la détection de l'encodage depuis un script (multioctet Zend), default_charset et la locale courante (voir nl_langinfo() et setlocale()), dans cet ordre. Non recommandé.

  > Note: Les autres jeux de caractères ne sont pas reconnus. L'encodage par défaut sera utilisé à la place et une alerte sera émise.

`double_encode`

  Lorsque le paramètre `double_encode` est désactivé, PHP n'encodera pas les entités html existants ; par défaut, tout est converti.

### Valeurs de retour

La chaîne convertie.

Si la chaîne d'entrée `string` contient une séquence de code invalide dans le paramètre `encoding` fourni, une chaîne vide sera retournée à moins que le drapeau `ENT_IGNORE` ou `ENT_SUBSTITUTE` ne soit défini.

### Historique

Version | Description
--- | ---
8.1.0 | `flags` à changé de `ENT_COMPAT` à `ENT_QUOTES` | `ENT_SUBSTITUTE` | `ENT_HTML401`.

### Exemples

Exemple #1 Exemple avec htmlspecialchars()

`<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>`

### Notes

> Note:

> Notez que cette fonction ne fait aucun autre remplacement que ceux qui sont listés ci-dessus. Pour faire un remplacement total, voyez plutôt htmlentities().

> Note:

> Dans le cas d'une valeur ambigue pour `flags`, les règles suivantes s'appliquent :

> - Quand aucun de `ENT_COMPAT`, `ENT_QUOTES`, `ENT_NOQUOTES` est présent, la valeur par défaut est `ENT_NOQUOTES`.
> - Quand plus d'un des `ENT_COMPAT`, `ENT_QUOTES`, `ENT_NOQUOTES` sont présent, `ENT_QUOTES` prend la plus haute priorité, suivi de `ENT_COMPAT`.
> - Quand aucun de `ENT_HTML401`, `ENT_HTML5`, `ENT_XHTML`, `ENT_XML1` est présent, la valeur par défaut est `ENT_HTML401`.
> - Quand plus d'un des `ENT_HTML401`, `ENT_HTML5`, `ENT_XHTML`, `ENT_XML1` sont présent, `ENT_HTML5` prend la plus haute priorité, suivi de `ENT_XHTML`, `ENT_XML1` et `ENT_HTML401`.
> - Quand plus d'un des `ENT_DISALLOWED`, `ENT_IGNORE`, `ENT_SUBSTITUTE` sont présent, `ENT_IGNORE` prend la plus haute priorité, suivi de `ENT_SUBSTITUTE`.

### Voir aussi

- get_html_translation_table() - Retourne la table de traduction des entités utilisée par htmlspecialchars et htmlentities
- htmlspecialchars_decode() - Convertit les entités HTML spéciales en caractères
- strip_tags() - Supprime les balises HTML et PHP d'une chaîne
- htmlentities() - Convertit tous les caractères éligibles en entités HTML
- nl2br() - Insère un retour à la ligne HTML à chaque nouvelle ligne