Quelle est la bonne façon d'échapper à une chaîne de caractères pour un lien mailto
J'ai un mailto:
lien dans une page ici, y compris subject=
et body=
paramètres mais je ne suis pas sûr de la manière de correctement s'échapper les données dans les paramètres.
La page est codée dans utf-8
donc je suppose que tous les caractères spéciaux comme les accents doivent être encodés dans utf-8
représentations pour les URL trop?
Pour le moment je suis en utilisant rawurlencode()
comme urlencode()
à insérer +
caractères dans tous les endroits où les espaces ont été mais je n'en suis pas sûr si ce est la bonne façon de le faire.
J'aurais pensé qu'
Eh bien, il fonctionne comme ça dans tous les usecases que j'y ai pensé, mais c'est peut-être pas la bonne façon de le faire et mon navigateur/client de messagerie juste de reconnaître correctement et de travailler autour de cette erreur, c'est pourquoi il est demandé, juste pour être sûr 🙂
Il peut y avoir des situations où l'un fonctionne et l'autre pas, mais si c'est le cas, alors il serait la faute du navigateur pour ne pas les interpréter correctement. Si il y a un bug connu avec l'un ou l'autre évidemment, il est préférable de l'éviter, mais je ne sais pas de n'importe quel navigateur moderne qui ferait une telle erreur fondamentale - si il y en a un, il va probablement être pauvre que d'être inutilisable de toute façon.
rawurlencode()
ou urlencode()
devrait faire le travail - le navigateur doit décoder correctement les deux versions avant de le transmettre au client de messagerie. Vous pouvez également créer un tableau de paramètres et d'utiliser les http_build_query()
- la chaîne de requête est dans le même format. Assurez-vous aussi de passer la chaîne résultante à partir de l'une de ces options à l'aide de htmlspecialchars()
si c'est pour être utilisé dans une page HTML...Eh bien, il fonctionne comme ça dans tous les usecases que j'y ai pensé, mais c'est peut-être pas la bonne façon de le faire et mon navigateur/client de messagerie juste de reconnaître correctement et de travailler autour de cette erreur, c'est pourquoi il est demandé, juste pour être sûr 🙂
Il peut y avoir des situations où l'un fonctionne et l'autre pas, mais si c'est le cas, alors il serait la faute du navigateur pour ne pas les interpréter correctement. Si il y a un bug connu avec l'un ou l'autre évidemment, il est préférable de l'éviter, mais je ne sais pas de n'importe quel navigateur moderne qui ferait une telle erreur fondamentale - si il y en a un, il va probablement être pauvre que d'être inutilisable de toute façon.
OriginalL'auteur bardiir | 2012-01-20
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de
rawurlencode()
le lien à la fin de l'adresse e-mail selon les normes du W3C.Il y a un exemple sur le Manuel PHP pour urlencode (recherche de mailto sur cette page):
http://php.net/manual/en/function.urlencode.php
str_replace('&','%26',rawurlencode($subject))
avec str_replace code de la
&
aura été changé à%26amp%3B
. Vous premier besoin de remplacer$amp;
avec&
et ensuite faire le rawurlencode(). Aussi pourquoi ne pas utiliserhtmlspecialchars_decode()
plutôt que de le str_replace?J'ai juste ajouté une réponse qui montre un exemple d'utilisation de cette réponse et commentaires: stackoverflow.com/a/46865401/1617737
OriginalL'auteur Paul Bain
Basé sur les réponses acceptées et c'est les commentaires, c'est ce que j'ai utilisé:
Exemple:
return $text;
à la fin de la fonction?Merci @Rober . J'ai mis à jour ma réponse maintenant.
OriginalL'auteur ban-geoengineering
OriginalL'auteur spekary