13 août 2008

Supprimer les caractères parasites d'un texte fourni en paramètres.

C'est un problème générique en PHP. On veut récupérer le texte d'une zone de caractères d'un formulaire (souvent une zone multi ligne, mais pas toujours) pour la mettre dans une base de données type mysql.
Et cela plante de partout en général à cause de caractères parasites type les virgules, les ":", les guillemets, apostrophes, ...

De façon plus vicieuse, tout marche bien, mais quand on veut réafficher la zone insérrée en base de donnée (pour un contrôle de l'information saisie par exemple), cela plante. Dans la moitié des cas affichage d'une feuille blanche au lieu de votre page de formulaires, ou dans le meilleur des cas, affichage d'une erreur du type "constante chaine non terminée", avec un numéro de ligne qui ne correspond à rien (par exemple le début du code html si a planté dans du php avant ce code html) qui évoque une erreur de type javascript. Ce second lot d'erreur est lié à des retours chariots ou des retours à la ligne dans la zone de texte transmise puis sauvée en base de données.

Une seule solution: Supprimer ou masquer tous ces caractères, et ce avant leur insertion en base de données.
Petit bout de code simple pour le faire, à partir d'un texte nommé "zonetexte" passé en post depuis un formulaire:

D'abord masquer pour le programme les caractères parasites style virgules, appostrophes, ... via la fonction addSlashes (texteàtraiter).
Ensuite, remplacer carrément les retours chariots transmis. Attention, il y a plusieurs codifications ASCII pour ces retours à la ligne, donc le faire pour chaque code (ici CHR(10) et CHR(13).
Le tout en suivant et avant de les stocker dans votre base de données.

$zonetexte = addSlashes($_POST["zonetexte"]);
$zonetexte=str_replace(CHR(10),"",$zonetexte);
$zonetexte=str_replace(CHR(13),"",$zonetexte);

Aucun commentaire:

Publier un commentaire