[php] guillemet et apostrophes dans input

Résolu/Fermé
apostrophé - 22 févr. 2011 à 16:49
 apostrophé - 23 févr. 2011 à 10:51
Bonjour,

J'ai une variable contenant :
ceci est un \"texte\", ne l\'effacez pas !

Il est tel quel dans ma base de donnée.
Je voudrais l'afficher dans une balise input en value par default.

L'ennui c'est que si j'englobe ma variable simple quote (apostrophes) :
<input type='text' name='test' value='".$mavar."'>

Il ne m'affiche pas mes apostrophes :
ceci est un \"texte\", ne l\effacez pas !

Si je l'englobe de guillemets :
<input type='text' name='test' value=\"".$mavar."\">

Dans ce ca là ca m'affiche :
ceci est un \texte\, ne l\'effacez pas !

C'est dingue, je ne souhaite pas remplacer les guillemets par des guillemets de style << , dans ma variable malgres que ca puisse etre une solution bricolage...

J'ai cherché longtemps mais je n'ai rien trouvé sur ce problème, existe-t-il une solution ou bien php ne sait pas gerer les deux en meme temps et il faut faire des conditions pour chaques textes :
- si il y a une apostrophe dans mon texte : je genere mon input avec les guillemets
- si il y a un guillemet dans mon texte : je genere mon input avec les simple quote
- et si y'a les deux ?

A voir également:

13 réponses

Bablon Arnaud Messages postés 74 Date d'inscription jeudi 13 janvier 2011 Statut Contributeur Dernière intervention 9 décembre 2011 11
Modifié par Bablon Arnaud le 22/02/2011 à 20:29
comme ca :
$test = htmlspecialchars('L\'"apostrophe n\'est pas un problème pour PHP'); 
$input = "<input type=\"text\" value=\"".$test."\"/>"; 
print $input.'<br />';



ou encore comme ca :

$test = htmlspecialchars('L\'"apostrophe n\'est pas un problème pour PHP');
$input = '<input type="text" value="'.$test.'"/>';
print $input.'<br />';
7
Voilà, j'ai trouvé, il ne maquais que le flag ENT_QUOTES a la fonction htmlspecialchars.
C'etait assez difficile à comprendre puisque le navigateur interprete directement ces carracteres speciaux mais maintenant c'est tout pigé ;)
Encore merci pour ton aide, je vais pouvoir proteger tous mes champs de textes et les afficher correctement ! :)
1
Bablon Arnaud Messages postés 74 Date d'inscription jeudi 13 janvier 2011 Statut Contributeur Dernière intervention 9 décembre 2011 11
Modifié par Bablon Arnaud le 22/02/2011 à 17:03
le texte dans la base de données n'est pas bon, tu ne dois pas avoir les \ dans ta base.
comment ta rentrer ton text dans la base ? (php gère très bien ca t'inquiète pas !!)
0
Non dans ma base c'est correct, c'est moi qui fait un addslashes() en sortie afin que ca ne cree pas de problemes.
Il n'y a pas de probleme avec mysql, c'est plutot entre php et html...
Cela m'est egal d'afficher les anti slash dans mon input, j'ai mis ce addslashes pour etre sur qu'il m'affiche ces carracteres speciaux dans l'input.
Mais peu importe... avec ou sans addslash, php ne semble pas savoir gerer une variable contenant les deux caracteres a la fois : guillemets et apostrophe.

Mais peut etre y a-t-il une astuce ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 févr. 2011 à 17:31
Bonjour,

Si tu choisis l'option double-quotes, remplace \\' par '
Si tu choisis l'option simples quotes, remplace \\" par "

Xavier

PS : Je suis d'accord avec Bablon Arnaud : ton utilisation du addslash pour l'insertion en base de données n'est pas pertinente : tu dis que c'est pour t'éviter des ennuis, mais tu as bien là la preuve que ça t'en ajoute plus qu'autre chose.
0
Ben j'ai un peu de mal à comprendre comment on peut afficher un texte avec apostrophe et guillemet, meme sans passer par php dans une balise input, c'est donc plus un probleme html en fait... :
<input type='text' name='test' value="ceci est un "texte", ne l'effacez pas">

<input type='text' name='test' value='ceci est un "texte", ne l'effacez pas'>


Comment html peut-il gerer ça ?
0
si je fait :
<input type='text' name='test' value='ceci est un \"texte\", ne l\'effacez pas'>

ou ca
<input type='text' name='test' value="ceci est un \"texte\", ne l\'effacez pas">

ou ca
<input type='text' name='test' value='ceci est un "texte", ne l'effacez pas'>

ou ca
<input type='text' name='test' value="ceci est un "texte", ne l'effacez pas">

rien ne fonctionne, quelle est la solution ?
0
Bablon Arnaud Messages postés 74 Date d'inscription jeudi 13 janvier 2011 Statut Contributeur Dernière intervention 9 décembre 2011 11
Modifié par Bablon Arnaud le 22/02/2011 à 18:25
un petit coup de pouce
<?php    
//php (j'ai un antislash car mon contenu est écrit en dure dans mon fichier il vient pas d'une BDD)   
 $test = 'l\'"apostrophe n\'est pas un problème pour PHP';   
?>   
//template   
<input id="test" name="test" value="<?php print htmlspecialchars($test); ?>"/>   

ou
$test = 'l\'"apostrophe n\'est pas un problème pour PHP';  
$input = "<input type='text' value='".htmlspecialchars($test)."'";  
print $input.'<br />';


mais enlève ton addslashes il sert a rien, moi j'ai mis le \ à la main sinon j'ai une parse error (normal)
0
Je n'avais pas pensé à htmlspecialchars, je sens que j'approche d'une solution grace a toi, merci !
L'ennui c'est que ton exemple ne fonctionne pas. Peut etre une petite erreur de syntaxe, mais il m'affiche seulement le l.

Je vais cogiter un peu sur ce htmlspecialchars, merci encore.
0
voila mon code :

$test = "l'apostrophe n'est pas un problème pour PHP. \"enfin a priori\"" ; 
 
echo $test."<br>" ;
echo htmlspecialchars($test)."<br>" ;

$input1 = "<input type='text' value='".htmlspecialchars($test)."'>(Fr)     ";  


Cela m'affiche seuelement le premier carracter aussi. Comme dans ton exemple. Car je fait la meme chose en intervertissant guillemets et apostrophe.

Ca ne fonctionne donc toujours pas... :(
0
Bablon Arnaud Messages postés 74 Date d'inscription jeudi 13 janvier 2011 Statut Contributeur Dernière intervention 9 décembre 2011 11
22 févr. 2011 à 20:18
mon exemple fonctionne !!! jlai tester sur mon pc !! jvais re regarder mais ca me parais suspect , jvais faire un test ac ta version les " et ' sont pas identique jvais looker
0
Bablon Arnaud Messages postés 74 Date d'inscription jeudi 13 janvier 2011 Statut Contributeur Dernière intervention 9 décembre 2011 11
22 févr. 2011 à 20:21
a oui autan pour moi, la version qui fonctionne c'est celle qui a le HTML en dehors du PHP (ce qui est plus propre) (test le 1er car avec le php qui creer la donnée et en dehors le html qui affiche et format la données) jlook pour le reste
0
je teste ça dès demain, je te tiens au courant merci.
0