nizouille Posté 27 Avril 2005 Posté 27 Avril 2005 Hello, J'ai un ptit quelque chose qui me pose problème sur mon site de supports de cours pour l'enseignement. Pourquoi est-ce que mes pages php enregistrent les parenthèses en caractères ascii ?
Anonymus Posté 27 Avril 2005 Posté 27 Avril 2005 Tu as très probablement une fonction du style htmlspecialchars ou htmlentities qui traine quelque part, soit avant l'insert dans la base de données, soit avant l'affichage à l'écran. Je pencherais pour la première solution, sachant que désactiver la fonction pourrait 'nuire' à ta base de données
nizouille Posté 27 Avril 2005 Auteur Posté 27 Avril 2005 (modifié) Et quoi, y a pas de solutions alors ? Qu'entends-tu par nuire ? Modifié 27 Avril 2005 par nizouille
Anonymus Posté 27 Avril 2005 Posté 27 Avril 2005 En fait, tu dois avoir une fonction, disons 'htmlspecialchars', qui convertit les caractères spéciaux, tel l'esperluette (&) en caractère html équivalent (&). Donc, ton enregistres du html dans la base de données. Jusque là, normal. Seulement, lors de l'affichage, tu refais la meme opération. Tu convertis ces memes caractères en entités html. Une parenthèse se retrouve donc tour à tour : 1 = ( 2 = ( 3 = ( Le cas 3 est du à la transformation du '&'. Jettes un oeil au programme qui affiche les données, tu as certainement une fonction qui transforme ces données. Par nuire, je veux dire que si l'on transforme ces caractères, c'est bien parce qu'ils sont spéciaux, et qu'ils peuvent provoquer des bugues.
Antoine Cailliau Posté 27 Avril 2005 Posté 27 Avril 2005 lol, comme quoi les questions sont les mêmes partout... Personellement, je ferai à l'insertion de la base : $chaine = preg_replace("#(\&\#[0-9]+)#", "", $chaine);
nizouille Posté 27 Avril 2005 Auteur Posté 27 Avril 2005 tu peux expliciter cela (pour voir si ça n'aura pas d'autres conséquences sur d'autres types de caractères spé)
Antoine Cailliau Posté 27 Avril 2005 Posté 27 Avril 2005 c'est vrai que cela risque de remplace trop de caractères. Fais alors : $chaine = preg_replace("#(\&\#(40|41)\#", "", $chaine); ainsi il remplacera les caractère ( et ) par rien du tout
nizouille Posté 27 Avril 2005 Auteur Posté 27 Avril 2005 J'aimerais éviter le problème, et qu'il m'encode correctement les ( ) dans ma db, ça me paraît plus intéressant que de laisser une erreur et de la corriger systématiquement
Antoine Cailliau Posté 27 Avril 2005 Posté 27 Avril 2005 Fais ceci alors, c'est encore plus malin. $chaine = preg_replace('#&\#(\d+);#me',"chr(\\1)", $chaine);
Anonymus Posté 27 Avril 2005 Posté 27 Avril 2005 Bon. Le problème, c'est qu'il est facile de dire ce qui pourrait 'dépanner', ca ne résoudra pas le fait qu'il y ait, comme tu le dis, un problème quelque part. Pourrais tu nous transmettre le programme qui envoie les données dans la base, ou celui qui les envoies à l'écran ? Que l'on sache de quoi on parle, de quoi il en retourne exactement ? Pour l'instant, on échafaude des théories sur rien de 'concret' Anonymus.
Antoine Cailliau Posté 28 Avril 2005 Posté 28 Avril 2005 Ma répo,nse permet enfait de remplacer les entités de caractère qui sont sous forme & # chiffre par leur équivalent caractère (chr). Mais il doit y avoir une enroule plus haut dans le script (lors de la mise en BDD d'une entité qui se fait trop ou pas assez)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant