Création de sites web en éco-conception

19/04/2013 Réafficher des entités de caractère dans un formulaire

Réafficher les valeurs d'un formulaire n'est pas chose aisée, surtout quand elles contiennent des caractères spéciaux.

Imaginons que l'on vienne de renseigner cette zone texte :

Elle contient un caractère spécial (ç) et une entité nommée (euro). Après avoir validé le formulaire, il sera réaffiché ainsi :

C'est normal. L'entité a été interprétée à l'affichage (€ ? €).

Si l'on souhaite réafficher la chaîne telle qu'elle a été tapée, on utilisera la fonction PHP htmlentities() ou htmlspecialchars().

Elles permettent - entre autres choses - de convertir le caractère & ce qui rend l'entité ininterprétable.

Elles peuvent également renvoyer des caractères illisibles. Contrairement à des fonctions qui - mal utilisées - génèrent des erreurs, ces petites sournoises ne préviennent pas qu'on les manie mal !

Rien de tel que des exemples pour comprendre leur fonctionnement.

Reprenons notre limaçon et observons comment ces fonctions le convertiraient, en faisant varier plusieurs critères :

  • le charset de la page ;
  • l'argument "drapeau" de la fonction utilisée : ENT_QUOTES, ,ENT_IGNORE (attention aux questions de sécurité !), ENT_SUBSTITUTE et ENT_DISALLOWED ;
  • l'argument "encodage" de la fonction utlisée : "ISO-8859-1" ou "UTF-8", ce dernier étant la valeur par défaut depuis PHP5.4.

charset='UTF-8'

  •  
    • htmlspecialchars($text,ENT_QUOTES,"ISO-8859-1")
      ? ce lima?on vaut deux € !
    • htmlentities($text,ENT_QUOTES,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_QUOTES,"UTF-8")
      ?
    • htmlentities($text,ENT_QUOTES,"UTF-8")
      ?
  •  
    • htmlspecialchars($text,ENT_IGNORE,"ISO-8859-1")
      ? ce lima?on vaut deux € !
    • htmlentities($text,ENT_IGNORE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_IGNORE,"UTF-8")
      ? ce limaon vaut deux € !
    • htmlentities($text,ENT_IGNORE,"UTF-8")
      ? ce limaon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_SUBSTITUTE,"ISO-8859-1")
      ? ce lima?on vaut deux € !
    • htmlentities($text,ENT_SUBSTITUTE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_SUBSTITUTE,"UTF-8")
      ? ce lima?on vaut deux € !
    • htmlentities($text,ENT_SUBSTITUTE,"UTF-8")
      ? ce lima?on vaut deux € !
  •  
    • htmlspecialchars($text,ENT_DISALLOWED,"ISO-8859-1")
      ? ce lima?on vaut deux € !
    • htmlentities($text,ENT_DISALLOWED,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_DISALLOWED,"UTF-8")
      ?
    • htmlentities($text,ENT_DISALLOWED,"UTF-8")
      ?

charset='ISO-8859-1'

  •  
    • htmlspecialchars($text,ENT_QUOTES,"ISO-8859-1")
      ? ce limaçon vaut deux € !
    • htmlentities($text,ENT_QUOTES,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_QUOTES,"UTF-8")
      ?
    • htmlentities($text,ENT_QUOTES,"UTF-8")
      ?
  •  
    • htmlspecialchars($text,ENT_IGNORE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
    • htmlentities($text,ENT_IGNORE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_IGNORE,"UTF-8")
      ? ce limaon vaut deux € !
    • htmlentities($text,ENT_IGNORE,"UTF-8")
      ? ce limaon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_SUBSTITUTE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
    • htmlentities($text,ENT_SUBSTITUTE,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_SUBSTITUTE,"UTF-8")
      ? ce lima�on vaut deux € !
    • htmlentities($text,ENT_SUBSTITUTE,"UTF-8")
      ? ce lima�on vaut deux € !
  •  
    • htmlspecialchars($text,ENT_DISALLOWED,"ISO-8859-1")
      ? ce limaçon vaut deux € !
    • htmlentities($text,ENT_DISALLOWED,"ISO-8859-1")
      ? ce limaçon vaut deux € !
  •  
    • htmlspecialchars($text,ENT_DISALLOWED,"UTF-8")
      ?
    • htmlentities($text,ENT_DISALLOWED,"UTF-8")
      ?

Commentaires

Ajouter un commentaire :