Page 1 sur 2
probleme d'apostrophe !!
Posté : 21 févr. 2006, 12:52
par keb
Bonjour,
Je suis un peu novice en php, mais j'essaie de faire qq applications.
En ce moment j'essaie de faire un formulaire qui rempli une base mysql avec differentes info, notament un champs texte.
Lorsque je rempli au clavier ces champs, pas de soucis.
Lorsque je fais un copier-coller depuis word, ou openoffice, les apostrohes contenues dans le texte, se transforme dans mysql en "’"....
Je trouve ca assez imcoprehensible, mais peu etre que qq'un peut m'aider ??
Posté : 21 févr. 2006, 12:55
par charabia
Je pense que Word traduit à sa façon l'apostrophe qui devient un caractère spécial, d'où l'affichage que tu as.
Je ne sais pas trop comment régler directement le problème, mais ce que je fais de mon côté c'est que je fais une recherche/remplace massif avec un éditeur de texte avant de l'intégrer dans mysql.
Je suis preneur s'il y a un autre moyen

Posté : 21 févr. 2006, 13:00
par albat
Pareil que
Charabia.

Je ne copie jamais directement de Word vers un formulaire web.
Je passe toujours via Notepad, de façon à ne récupérer que le texte
brut.
C'est-à-dire de manière à ce que les apostrophes et les guillemets
soient débarassés de toute ornementation propre à un traitement de texte.
Posté : 21 févr. 2006, 13:09
par Invité
et si on rentre un texte avec une apostrphe, dans ma base moi, il se stoppe, et ne complete pas la fin ,comment faire pour qu'il prenne le texte en entier???
Posté : 21 févr. 2006, 14:10
par savousepate
il faut que tu utilise la fonction
addslashes() qui te permet d'ajouter des
\ devant les
" ou les
'
par exemple, si tu as :
$var = 'c'est la fête';
et que tu essayes de l'insérer dans une table de ta base de données, tu n'auras que
c
alors que si tu fais :
$var = addslashes(c'est la fête);
tu obtiendras :
c\'est la fête
par contre, si tu veux faire un echo de cette variable par la suite, il faut que tu enlèves les
\ grâce à la fonction
stripslashes() qui fonctionne de la même manière
... je ne sais pas si j'ai été assez claire
Posté : 21 févr. 2006, 14:23
par keb
plus claire que ca tu meurt
ok ok je
et mais j'ai une
heu non rien
Posté : 21 févr. 2006, 14:45
par oxy
J'ai le même promblème avec une apostrophe ds une variable....
$inf="Envoyez un mail d' information";
Qd il y à l'apostrophe le script s'arrete et n'insert rien ds ma base.. Par contre je ne veux pas non plus qu'il affiche
d/'information... dois je passer par cette m^me fonction qd même ou existe il une autre possibilité pour insérer simplement ce " d' " sans souci ?
Posté : 21 févr. 2006, 16:00
par albat
Les fonctions addslashes() et stripslashes() sont exactement ce qu'il vous faut.
Posté : 21 févr. 2006, 16:21
par oxy
ok, merci bcp je vais tester ça....
Posté : 21 févr. 2006, 16:25
par oxy
whouaaaaaaa c'est magique ca marche
c'est trop fort c'est truc la je vais y passe la nuit juste pour le plaisir

Posté : 21 févr. 2006, 16:30
par oxy
Mais alors puis je taper directement :
$var = 'c\'est la fête';
et simplement utiliser stripslashes ();
pur le virer. Ou dois-je d'abord automatiquement passer par addslashes();
Posté : 21 févr. 2006, 16:32
par oxy
whouaaaaaaa c'est magique ca marche
c'est trop fort c'est truc la je vais y passe la nuit juste pour le plaisir
Je ne sais pas qui à taper celà, mais si pour toi ça parait évident ce ne l'est pas pour moi......
Posté : 21 févr. 2006, 16:35
par albat
Mais alors puis je taper directement : $var = 'c\'est la fête';
et simplement utiliser stripslashes (); pur le virer.
Ou dois-je d'abord automatiquement passer par addslashes();
Vérifie-le en faisant quelques tests, mais ce doit être identique.
addslashes() ne fera que précéder tes apostrophes d'un antislash,
chose que tu peux très bien faire toi-même à la main.
Avantages d'utiliser la fonction addslashes plutôt que le faire à la main :
- c'est plus rapide
- tu es sûr de ne pas en oublier
Posté : 21 févr. 2006, 16:40
par oxy
ok, merci

Posté : 21 févr. 2006, 16:44
par Ryle
bah l'intérêt de la fonction addslash (comme de n'importe quelle fonction d'ailleurs), c'est de t'éviter de devoir le faire à main

Si tu préfères écrire directement l'antislash devant chaque caractère à échapper, ça revient au même
Attention toutefois à la façon dont ta chaine est déclaré (entre guillemets ou entre apostrophes)
$var = "c\'est la fête";
echo $var; // affiche : c\'est la fête
$var = addslashes("c'est la fête");
echo $var; // affiche : c\'est la fête
$var = 'c\'est la fête';
echo $var; // affiche : c'est la fête (sans l'antislash)
donc si tu utilises ensuite $var dans une requête sql :
"SELECT * FROM maTable WHERE monChamp = '$var'";
// tu obtiendras avec 1 et 2
"SELECT * FROM maTable WHERE monChamp = 'c\'est la fête'"; // ok
// mais avec la troisième :
"SELECT * FROM maTable WHERE monChamp = 'c'est la fête'"; // ko