Imbriquer les quotes

trebmal14 Messages postés 801 Date d'inscription   Statut Membre Dernière intervention   -  
 Pitet -

Bonjour,

J'ai un problème que je n'arrive pas à résoudre.

J'explique la situation :

J'ai une page qui me permet d'envoyer des SMS à des clients. Pour ça j'utilise la fonction sms: 

Par exemple si je veux envoyer "bonjour à tous" au numéro "0601020304" je peux utiliser ce lien : 

<a href="sms:0601020304&body=bonjour à tous !">envoyer le SMS</a>

Jusque là tout va bien.

Maintenant si je veux que le numéro du destinataire et le contenu du message soit personnalisables dans une page HTML grâce à des input j'utilise d'abord ceci :

<form method=post action=envoi.php>
<input type=tel name="numéro"> Numéro du destinataire
<br>
<input type=text name="message"> Contenu du message
<br>
<input type=submit>
</form>

Ensuite sur la page envoi.php j'utilise la fonction http-equiv refresh pour créer une redirection HTML qui va générer un lien de redirection :

<html>
 <head>
  <meta http-equiv="refresh" content="0;URL=sms:<?PHP echo $_POST['numero']; ?>&body=<?PHP echo $_POST['message']; ?>">
 </head>
 <body>
  Message envoyé !
 </body>
</html>

Et là je viens de créer une redirection immédiate qui a généré mon lien avec le destinataire et le message saisis précédemment. C'est top tout fonctionne nickel ! 

Le problème est un tout petit peu plus complexe. 

Si jamais l'utilisateur saisi le caractère " dans le corps du message, le lien se tronque car le navigateur pense lire la fin de la balise content="..."

Par exemple si je saisi dans l'input message le texte suivant : 

Bonjour à tous ! Je suis "trebmal14"

Le lien qui sera généré sera sms:0601020304&body=Bonjour à tous ! Je suis 

Voilà le problème...

J'ai essayé de remplacer le content=" par content=' 

Ça marche bien mais le problème se reproduit s'il y a une apostrophe dans le message.

J'ai aussi essayé avec du onKeyUp et du JS pour remplacer les caractères ' par des &apos; 

<script>
function myFunction(srcObj) {
      if (srcObj.value.indexOf("'") != -1) {
        srcObj.value = (srcObj.value.split("'")[0] + "&apos;" + srcObj.value.split("'")[1]);
  }
}
</script>

Alors techniquement ça marche bien, le résultat envoyé n'est pas tronqué, mais alors dans le champs input, dès qu'on tape "je m'appelle" ça remplace immédiatement par "je m&apos;appelle" c'est super moche.

Auriez-vous une solution pour que mes " et ' saisis dans mon champs message ne soient pas considérés comme des fins de ma balise content= ?

Merci beaucoup ????

Android / Chrome 113.0.0.0


1 réponse

jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 

Bonjour,

Faire la conversion des caractères dans le php, à la main, ou en utilisant une fonction comme htmlentities()

<html>
 <head>
 </head>
 <body>
  Message envoyé ! <?PHP echo $_POST['numéro']; ?>&body=<?PHP echo htmlentities($_POST['message'], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401); ?>
 </body>
</html>

0
Pitet
 

Pour afficher le message dans une page html, la fonction htmlentities() ou htmlspecialchars() est la bonne solution.

Puisque le message est dans une url, la fonction urlencode() semble mieux adaptée (pas sûr que les entités html soient décodées dans le sms) :

<meta http-equiv="refresh" content="0;URL=sms:<?PHP echo urlencode($_POST['numero']); ?>&body=<?PHP echo urlencode($_POST['message']); ?>">
0