🔧 Icones et utf-8 🤡

Caractères utf-8

un certains nombre de caractères utf8 que j'utilise couramment sont ici

J'utilise aussi ces liens :

www.fileformat.info csbruce.com www.utf8icons.com

Caractères bizarres et mysql

Voici une liste de caractères que j'utilise pour mes tests quand je fais des "post".

utf8 dans mysql

Un bon article que j'ai trouvé sur mathiasbynens.be

TLDR: utf8mb4 existe depuis MySQL 5.5.3 (début 2010) et je vous suggère de n'utiliser que cet encodage, en particulier pour des raisons de sécurité.

Si vous utilisez php pour lancer de requêtes SQL alors je vous conseil très vivement d'utiliser la fonction addslashes pour les INSERT/UPDATE/DELETE.

Un piège dans lequel je suis tombé !

Un client ne retrouvait pas un nom accentué dans sa base de donnée.
Je pense qu'il avait lui même fait un copier/coller de ce nom à partir d'un document ( web, pdf, ... ? )
Par exemple, voyez vous une différence visuelle entre ces deux "a" accentués :

"àà"

Sur mes navigateurs (chrome, firefox, Edge, IE), je ne vois aucune différence.

Pourtant ce sont deux encodages différents, ces deux caractères ont des aspects différents dans mon éditeur préféré : notepad++ ces deux "a" ressemblent à cette image : différence entre deux a accentués . Le deuxième a est plus petit que le premier.
Dans vscode et d'autres éditeurs on ne voit aucune différence :-\
Pour reproduire, soit vous pouvez copier/coller les deux a accentués plus haut, soit vous pouvez utiliser cette url:

https://www.google.com/search?q=%C3%A0%20or%20a%CC%80


Le problème est le même avec, entre autre, ces caractères: àâãá éèêÉ ïî ñÑ óôö üÜÜ que j'ai trouvé et remplacé dans la base de donnée de mon client.
Puis, j'ai ajouté une fonction de conversion php avant des les insert et les update sql :
strtr( $string, $aCh ); qui utilise le tableau de conversion suivant :

 
$aCh=array(   'à' => 'à' , 'â' => 'â' ,'ã' => 'ã' , 'á' => 'á' ,
              'é' => 'é' , 'è' => 'è' ,'ê' => 'ê' , 'É' => 'É' , 
              'ï' => 'ï' , 'î' => 'î' ,
              'ñ' => 'ñ' , 'Ñ' => 'Ñ' ,
              'ó' => 'ó' , 'ô' => 'ô' , 'ö' => 'ö' , 
              'ü' => 'ü' , 'Ü' => 'Ü' 
       );
// j'imagine qu'il faut traiter les caractères 
// qui contiennent un code allant de 768 à 790 au moins mais comment en être certain ?
// On peut aussi utiliser cette fonction de test
// function my_character2numeric($t){
//  $convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
//  return mb_encode_numericentity($t, $convmap, 'UTF-8');
// }       
// à,á,â,ã,ā,a̅,ă,ȧ,ä,ả,å,a̋,ǎ,a̍,a̎,ȁ,a̐,ȃ,a̒,a̓,a̔,a̕,       
à (à) à (à) , â (â) â (â) , ã (ã) ã (ã) , á (á) á (á) , é (é) é (é) , è (è) è (è) , ê (ê) ê (ê) , É (É) É (É) , ï (ï) ï (ï) , î (î) î (î) , ñ (ñ) ñ (ñ) , Ñ (Ñ) Ñ (Ñ) , ó (ó) ó (ó) , ô (ô) ô (ô) , ö (ö) ö (ö) , ü (ü) ü (ü) , Ü (Ü) Ü (Ü) ,

Conclusion : recherchez dans vos bases de données les caractères ayant un code de "768" à "790" et peut-être d'autres. Et merci notepad++ !


📝 Les Articles.

Le symbole "🔧" (clé plate) indique les articles techniques.