c
a
d
r
a
t






  Entrée  
   Ressources   
    Code  
     Formatage  
 
+  Des ressources en corpus, isotopies et programmes
+  Des articles d’ études sur le traitement automatique de la langue
+  Les pages du site pour des recherches, informations, résumés...


 
     les programmes de nivellement de caractères à encodages multiples en PHP   
La convertion des entités HTML et des divers codes de représentation des caractères

 1.  L’encodage d’une page html

Il arrive qu’un navigateur doive représenter plusieurs normes de caractères dans une même page HTM, qu’un agrégateur fasse coexister des pages RSS au codage différent ou qu'une page XML n'admette qu'un seul type d'encodage. Afin d'aider au nivellage des caractères d'une page HTM, RSS ou XML, il est exposé ci-dessous une liste de phrases éprouvant in situ les instructions PHP de conversions de texte de type html_entity_decode puis un code de programmation synthétisant la conversion de tous les formats courants d'une page HTML. Un décalage de la représentation des caractères s’observe aussi sur papier, par exemple pour les guillemets, rarement uniformes, ou avec des caractères rares comme œ et le oe. Cette ligature présente une différence minime à la lecture, mais en cas de classement ou de choix de représentation, elle implique une uniformisation, de considérer une orthographe selon le phœnix (la forme vieillie ou la variété de palmier) ou phénix, et sans risquer l’analogie avec l’anglais phoenix, voire pertubent l’immuable 26 lettres de l’alphabet français, avec un caractère qui est une contraction graphique.

La réalisation de la présente page est un bon test pour éprouver les solutions à l'encodage de caractères. Deux problèmes se sont posés. Le premier est de rendre les transformations opérées sur le texte par les instructions de type htmlentities, le second de représenter l'ensemble du code programmation. Pour le premier, le présent navigateur convertissant les entités HTML en caractères pleins, il devient compliqué d'afficher un rendu exact des tests de conversion. Afin d'éviter la conversion en entité HTML des tableaux de tests, et afficher un rendu de type code source, l'encodage de la présente page est en ISO-8859-1 et utilise la fonction d'affichage Canvas d'HTML5, qui transforme le texte en graphique (même dans une balise textarea le résultat serait encodé par le navigateur). Pour le second problème, à savoir l'affichage du code de programmation, étant donné que le code doit être récupérable dans son mode texte et qu'il n'est pas possible de le réaliser dans une balise Canvas, il a été choisi d'afficher le code par l'intermédiaire d'une balise iframe d'un fichier en extension .php (pour eviter son ouverture en externe) en plaintext (pour empêcher la conversion en entité HTML).

Parmi ces formats courants d’une page HTML, l’on relève par exemple pour un caractère dit Latin comme le é :
- é pour les entités HTML (appelées entités littérales) ouvert avec l’esperluette et fermé par un point-virgule ;
- é pour l’ASCII étendu (appelées entités numériques), avec l’esperluette et le croisillon puis la valeur ASCII ;
- é pour l’UTF8 qui comporte le A avec tilde puis un autre caractère ;
- %E9 pour l’encodage des URL qui comporte le % suivi d’un code à deux caractères ;

PHP décline plusieurs instructions afin de transformer le texte d’un format à un autre. Depuis PHP 5 il est nécessaire de préciser "ISO-8859-1" en troisième argument et ENT_QUOTES ou ENT_IGNORE en second pour les guillemets. Les test ci-dessous permettent de constater que l'entité ’ n'est pas retenue par ENT_QUOTES.

Pour amorcer le format de la page html il est nécessaire de la préciser soit dans la page <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> ou <meta charset="ISO-8859-1"> soit dans l'exécution PHP header( 'content-type: text/html; charset=ISO-8859-1' ); ou ini_set('default_charset', 'ISO-8859-1');. Ces deux dernières étant beaucoup plus solides.
 


 

 2.  instructions de conversion

 2.1.  caractère vers entité

htmlentities($str) : les caractères bruts de type accent ou balises sont transformés en entités HTML.

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 

 2.2.  caractère vers entité, apostrophes incluses

htmlentities($str, ENT_QUOTES) : variante pour inclure la transformation des apostrophes.

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 

 2.3.  entité vers caractère

html_entity_decode($str) : les entités HTML de type accent ou balises sont transformés en caractères bruts.

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 

 2.4.  entité vers caractère, apostrophes incluses

html_entity_decode($str, ENT_QUOTES) : variante pour inclure la transformation des apostrophes doubles et simples. À noter que &rsquo; n’est pas retenu comme apostrophe.

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 

 2.5.  entité numérique vers caractère, apostrophes incluses

Unhtmlentities($str) : les entités HTML numériques de type accent ou balises sont transformés en caractères bruts.
La transcription n’est pas native, il faut donc recourir à une fonction avec preg_replace.

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 

 2.6.  décodage d’une chaîne à codages imbriqués

La transformation des entités HTML alphabétiques (ou littérales), numériques, UTF8, de type accent, balise et apostrophe, en graphème unique ou groupé (points de suspension).

Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d’été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été et d'automne.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matins d'<strong>été</strong>.
 
 Initiale :

Transformée :

chaîne dans le présent code source : Matinées d'été.
 
 Initiale :

Transformée :

chaîne dans le présent code source : « Matinées d’un "été". »
 
 Initiale :

Transformée :

chaîne dans le présent code source : Un oeuf et un œuf, et deux œufs et un autre œuf.»
 
 Initiale :

Transformée :

chaîne dans le présent code source : áÁâÂàÀåÅãÃäÄæÆçÇéÉêÊèÈëËíÍîÎìÌïÏñÑóÓôÔòÒøØõÕöÖ
 
 Initiale :

Transformée :

chaîne dans le présent code source : ßðÐþÞúÚûÛùÙüÜýÝÿ
 
 Initiale :

Transformée :

chaîne dans le présent code source : œŒšŠŸ
 
 Initiale :

Transformée :

chaîne dans le présent code source :  ­‎‏"«»‹›“”„'‘‚…¡¿¨´ˆ˜¸·•¯‾–—¦‌‍†‡§¶©®™&◊♠♣♥♦←↑→↓↔¤€$¢£¥ƒ
 
 Initiale :

Transformée :

chaîne dans le présent code source : °µ<>≤≥≈≠≡±−×÷⁄‰¼½¾¹²³ºªƒ′″∂∏∑√∞¬∩∫
 
 Initiale :

Transformée :

chaîne dans le présent code source : "«»‹›“”„'‘’‚…!¡?¿()[]{}¨´`^ˆ~˜¸#*,.:;·•¯‾-–—_|¦‌§¶©®™&@/\◊♠♣♥♦←↑→↓↔†‡ ­‎‏
 
 Initiale :

Transformée :

chaîne dans le présent code source : ύä§Ã©ä©Ã¨ä¨ÃªäªÃ«ä«ÃŠäŠÃ‹ä‹Ã®ä®Ã¯ä¯Ã¬ÃŽäŽÃ²ä²Ã´ä´Ã¶ä¶ÃµÃ³Ã¸äµä³ä¸Ã”ä”Öä–âä¢Ã¤ä¤Ã¥ä¥Ã‚ä‚Ää„ùûüä¼Ã›Ãœä¹ä»ä¼ä¼ä›äœÃ²Ã±â€Ãä…™
 
 Initiale :

Transformée :

chaîne dans le présent code source : Voici le texte le plus mal encodé de la toute la blogosphère (et pas seulement à cause des caractères accentués).
 
 


 

     Le langage PHP    II.3.3.  
     Le programme de conversion en minuscule en PHP

     La page d’accueil
     Le sommaire des pages


       Site       motte 0.5  
       Imprimer  
     Rédaction / Publication : 19.04.2010     Révision : 10.02.2016
      http://cadrat.saynete.net2003 - 2023