[RESOLU] Affichage du caractère ' (accent)

Eléphant du PHP | 67 Messages

18 sept. 2012, 14:24

Bonjour ....
Si quelqu'un a une idée pour ce petit problème :

Voici le code qui fonctionne (sans accent)
<a href="#" onClick="openfenetre('../common_fr/_formfree.php?envoi=Vous pouvez imprimer ce formulaire avant de l envoyer afin de conserver une trace de votre demande&ori=1','A','1280','1024','yes','center')">]

Si je met l'accent, j'ai bien sûr un message d'erreur:
<a href="#" onClick="openfenetre('../common_fr/_formfree.php?envoi=Vous pouvez imprimer ce formulaire avant de l ' envoyer afin de conserver une trace de votre demande&ori=1','A','1280','1024','yes','center')">

Si je mets l'antislash pour échapper, je n'ai plus de message d'erreur mais l'antislash s'affiche au résultat
<a href="#" onClick="openfenetre('../common_fr/_formfree.php?envoi=Vous pouvez imprimer ce formulaire avant de l \' envoyer afin de conserver une trace de votre demande&ori=1','A','1280','1024','yes','center')">

PS : 'openfenetre' est une fonction Javascript que voici:
<script language="JavaScript" type="text/javascript">
var win=null;
function openfenetre(mypage,myname,w,h,scroll,pos){
if(pos=="random"){LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;}
if(pos=="center"){LeftPosition=(screen.width)?(screen.width-w)/2:100;TopPosition=(screen.height)?(screen.height-h)/2:100;}
else if((pos!="center" && pos!="random") || pos==null){LeftPosition=0;TopPosition=20}
settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';
win=window.open(mypage,myname,settings);}
</script>

Un grand merci d'avance de vos bons conseils ...
Philippe

ViPHP
ViPHP | 2577 Messages

18 sept. 2012, 15:38

\' ou peut être '' (2 quotes)

Edit : regarde dans le source de la page ce qui est généré. C'est peut être \\' qu'il faut mettre pour que \ ne soit pas transformé en \\ mais en \'

Eléphant du PHP | 67 Messages

18 sept. 2012, 16:34

\' ou peut être '' (2 quotes)

Edit : regarde dans le source de la page ce qui est généré. C'est peut être \\' qu'il faut mettre pour que \ ne soit pas transformé en \\ mais en \'
Merci Mazarini.
Ni l'un ni l'autre ne fonctionne mais je crois que mon problème vient plutôt de Javascript, pas de PHP.
Je ne suis donc pas sûr d'avoir mis le post sur le bon forum (PHP FRANCE ... il y a PHP dans le titre)

Je vais chercher dans cette voie.

Merci pour tes réponses toujours rapides, en tout cas
Philippe

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 sept. 2012, 13:44

Alors tout d'abord, c'est un problème d'apostrophe plutôt que d'accent :) (merci maître capello ;))

Entre guillemets, on ne peut pas mettre de guillemets sans les protéger (mais on peut utiliser des apostrophes), entre apostrophes, on ne peut pas mettre d'apostrophes sans les protéger (mais on peut utiliser des guillemets). Ton problème vient du fait que tu as des guillemets pour ton attribut html, et que celle-ci contient une chaine javascript délimitée par des apostrophes (en supposant qu'il n'y a pas de php autour de tout ça ;))

La bonne syntaxe est donc bien :
<a href="#" onClick="openfenetre('../common_fr/_formfree.php?envoi=Vous pouvez imprimer ce formulaire avant de l \' envoyer afin de conserver une trace de votre demande&ori=1','A','1280','1024','yes','center')">
Ta méthode javascript se contentant d'ouvrir l'url spécifiée avec les arguments, celle-ci n'est pas en cause. A mon avis, ton problème est dans _formfree.php qui récupère correctement ta variable $_GET['envoi'] (sans le \ ), applique les magic quotes (qui protège automatiquement les variables reçues) et ajoute donc le \ qui te gène à l'écran.

Du coup, voici quelques suggestions :
- tu testes si les magic quotes sont activées ou non et tu re-transformes ta chaine en conséquence :
 if (get_magic_quotes_gpc()) // SI ajout automatique des antislash par php
            $_GET['envoi'] = stripslashes($_GET['envoi']); // suppression des antislashs ajoutés à ta variable $_GET['envoi']
- autre solution qui me semble plus simple, c'est de mettre ton message d'information directement dans ton script php, et éventuellement dans l'url, envoyer un flag pour dire si le message doit être affiché ou non...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 267 Messages

19 sept. 2012, 14:14

salut,

et si tu essaies ceci :
<a href="#" onClick="openfenetre(\"../common_fr/_formfree.php?envoi=Vous pouvez imprimer ce formulaire avant de l ' envoyer afin de conserver une trace de votre demande&ori=1\",'A','1280','1024','yes','center')">
ça donne quoi ?

@+
dix2

Eléphant du PHP | 67 Messages

19 sept. 2012, 14:36

Merci pour vos réponses ...

Effectivement, je pense que la solution préconisée par Ryle est la plus simple : envoyer un flag à partir des pages sources (j'ai le même problème pour les retours d'erreurs à partir de mon sript de traitement) et mettre un switch/case dans ma page target pour afficher le bon message

Je n'y avais pas pensé ...
Comme quoi, il y a plus dans 2 têtes que dans une ...

... et effectivement, "c'est moi que je me suis gouré" dans l'appellation ... ce n'est pas l'accent, c'est l'apostrophe .... sorry ...

Merci pour vos réponses, en tout cas ... sympa

Philippe