Benjamin Caubere development wordpress design acymailing newsletter animation flash

Trouver la valeur ASCII d’un caractère

Ces derniers jours en travaillant sur le traitement de flux xml multilingues, je suis tombé par hasard sur un problème simple mais toutefois ennuyant.

Le but de ma mission était de transférer une partie des informations contenues dans un fichier xml vers une base de données. L’une des contraintes était de remplacer les espaces contenus dans certaines chaînes de caractères par des underscores « _ ». L’objectif me parut simple et il ne m’en aurait pas pris plus d’une minute pour le realiser en temps normal.

solution classique :

//on remplace le caractère espace par un underscore dans la chaîne a traiter $nouvelleChaine = str_replace(" ","_",$chaineAtraiter);

C’était sans compter certains caractères invisibles…

En effet lorsque on est maître de l’information entrée il n’y a aucun problème, on est sure qu’un espace est bel et bien un espace. Par contre lorsqu’un tiers se charge d’entrer l’information est que cette dernière est ensuite manipulée n fois il devient moins évident qu’un espace apparaissant a l’écran est un espace a proprement dit en code ASCII.

Après être resté perplexe pendant une bonne demi heure je me suis mis en tête d’analyser la chaîne de caractères défectueuse, caractère par caractère et retourner la valeur ASCII de chacun de ceux ci au moyen de la fonction ord.

la solution:

//transforme la chaîne de caractère en un tableau de lettres $tableauLettres = str_split($chaineAtraiter); //pour chaque lettre on affiche la valeur d'affichage normale et sa correspondance en ASCII foreach($tableauLettres as $lettre){ echo "Lettre : ".$lettre." Valeur ASCII ".ord($lettre)."\n"; } 

Le caractère d’espacement inconnu retourne la valeur ASCII décimal : 160 . Cette dernière correspond au caractère d’espacement ‘ ’ en html. Une fois la valeur ASCII du caractère dérangeant retrouvé il n’y a plus qu’a traiter la valeur ASCII cible dans la chaîne de caractères au moyen de la fonction chr retournant la valeur d’affichage d’un caractère a partir de sa valeur ASCII.

fin de la solution:

//préparation des tableau de recherche et remplacement pour str_replace $tableauCherche=array(' ',chr(160)); $tableauRemplace=array("_","_"); //on remplace les espaces standard et les espaces &nbsp (ASCII:160) par des underscore "_" $nouvelleChaine = str_replace($tableauCherche,$tableauRemplace,$chaineAtraiter);


Leave a Reply
Cliquez ici pour annuler la réponse.
Image CAPTCHA
Rafraîchir l'image
*

Pages
  • Contact
Abonnez-vous!

Recevez nos dernières nouvelles directement dans votre boîte de réception. Vous recevrez un email d'activation!