Problème apostrophe dossier

Eléphant du PHP | 184 Messages

19 nov. 2011, 16:17

Bonjour,

J'ai une fonction qui me crée un dossier pour enregistrement du chemin du dossier dans une bdd.

Mais pour éviter les erreurs, j'ai enlevé les accents etc avant d'enregistrer.
Mon soucis, c'est que quand je met un ' dans mon champ et que j'enregistre, il me l'interpréte comme cela:

coucou' ----> coucou\-

Je suis sensé avoir coucou-.

J'ai fait cela:
$avec_accent 	= utf8_decode("ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖOEØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñSsoe '²|',;:!¿/(){}[]+=*~<>&¢€£\$¤¥§©ø÷×µ¶®°±¨@#");
$sans_accent 	= utf8_decode("abcdefghijklmnopqrstuvwxyzAAAAAAACEEEEIIIIOOOOOOOUUUUYaaaaaaaceeeeiiiioooooouuuuyynnsso--------------------------------------------");

$nom_categorie_dossier	= strtr(utf8_decode($nom_categorie), $avec_accent, $sans_accent);
$nom_categorie_dossier	= utf8_encode($nom_categorie_dossier);
$nom_categorie_dossier	= mysql_real_escape_string($nom_categorie_dossier); // (pour enregistrement en Bdd)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 nov. 2011, 16:29

salut,

si tu a php5.3 je te conseil http://php.net/normalizer (http://www.php.net/manual/fr/normalizer.normalize.php)

sinon, vire simplement tous ce qui n'est pas alphanumérique, le reste est parfois source d'ennuis (bien que les - ou _ ne devraient pas poser de soucis).

pour ce qui est du \- je pense que c'est parce qu'a la base tu a \' et que tu ne remplace pas le \ dans ta chaine si si je t'assure.

le \' est probablement dû aux magic quote activée sur ton hébergement, un stripslashes devrait aider.

pour ce qui est du fait que tu n'échappe pas le \ dans ton code : regarde bien ta chaine sur le forum, le \$ est en gras.

pourquoi ? parce que tu utilise des " et que dans ce type de chaine les variables sont interprétées. hors si tu n'avais pas le \ tu aurais surement une erreur d'analyse parce que php ne trouve pas une variable :)

la le \$ indique que tu "échappe" le $ et que donc tu ne cherche pas de variable après ce $ dans la chaine.

la va falloir rusé, ajoute deux \ devant ou autre part dans la chaine, d'ailleur tu n'échappe pas les " donc un \" a ajouter dedans.

=> ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖOEØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñSsoe '²|',;:!¿/(){}[]+=*~<>&¢€£\\\$¤¥§©ø÷×µ¶®°±¨@#\"

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

19 nov. 2011, 18:00

Super !

Merci beaucoup pour cette explication !