[php] guillemet et apostrophes dans input [Résolu/Fermé]

Signaler
-
 apostrophé -
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 ?

13 réponses

Messages postés
74
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
11
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

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 ! :)
Messages postés
74
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
11
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 !!)
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 ?
Messages postés
3656
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
20 novembre 2020
975
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.
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 ?
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 ?
Messages postés
74
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
11
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)
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.
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... :(
Messages postés
74
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
11
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
Messages postés
74
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
11
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
je teste ça dès demain, je te tiens au courant merci.