[php] guillemet et apostrophes dans input

Résolu
apostrophé -  
 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 ?

A voir également:

13 réponses

Bablon Arnaud Messages postés 74 Date d'inscription   Statut Contributeur Dernière intervention   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
apostrophé
 
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   Statut Contributeur Dernière intervention   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 !!)
0
apostrophé
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
apostrophé
 
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
apostrophé
 
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   Statut Contributeur Dernière intervention   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)
0
apostrophé
 
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
apostrophé
 
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   Statut Contributeur Dernière intervention   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
0
Bablon Arnaud Messages postés 74 Date d'inscription   Statut Contributeur Dernière intervention   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
0
apostrophé
 
je teste ça dès demain, je te tiens au courant merci.
0