2009-10-27 22 views
4

J'ai un lien générant l'application web. Je voudrais le rendre facile pour les utilisateurs d'envoyer par courrier électronique les liens qu'ils créent à d'autres en utilisant Gmail, Yahoo Mail, etc Yahoo mail a une bizarrerie particulière que j'ai besoin d'une solution de contournement.URI encodage dans Yahoo mail composer le lien

Si vous avez un compte de messagerie Yahoo, s'il vous plaît suivez ce lien:

http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%23anchor

Notez que Yahoo redirige vers un serveur de messagerie spécifique (par exemple http://us.mc431.mail.yahoo.com/mc/compose). Comme il le fait, il décode les codes hexadécimaux. L'un d'entre eux,% 23, est un symbole de hachage qui n'est pas légal dans une valeur de paramètre de chaîne de requête. Toutes les infos après% 23 sont perdues.

Tous mes liens sont cassés, et il n'est pas possible d'utiliser un autre caractère. L'appel us.mc431.yahoo.com fonctionne directement pour moi, mais probablement pas pour tous les utilisateurs, en fonction de leur emplacement.

J'ai essayé de définir html = true | false, en plaçant l'URL dans une balise html. Rien ne fonctionne. Quelqu'un at-il une solution de contournement fiable pour cette bizarrerie particulière?

Remarque: toute solution de contournement basée sur un serveur est un problème pour moi. Cela doit être un lien entre Yahoo et l'utilisateur final.

Merci

Répondre

1

Je pense que vous êtes à la merci de ce que le serveur de Yahoo fait quand il émet la redirection HTTP. Il semble que devrait préserver l'URL qui s'échappe sur la redirection, mais ne l'est pas. Cependant, sans la connaissance de leur application sous-jacente, il est difficile de dire pourquoi ce ne serait pas le cas. Peut-être, c'est juste un effet secondaire (ou un bug) involontaire, ou peut-être que certaines des fonctionnalités Javascript sur cette page les obligent à faire quelques finagling avec la balise de hachage.

3

J'ai eu le même problème ces dernières heures et j'ai trouvé une solution de contournement!

Si vous double-codez l'ancre, elle sera interprétée correctement par Yahoo. Cela signifie que vous modifiez% 23 à% 2523 (le signe pourcentage est encodé en% 25).

Ainsi, votre URI sera:
http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%2523anchor

La même solution peut être utilisée pour esperluette. Si vous n'écrivez que% 26, alors Yahoo convertira cela en "& amp;" qui va jeter le reste du message. Même procédure que ci-dessus - remplacez% 26 par% 2526.

Je n'ai toujours pas trouvé de solution au problème de nouvelle ligne (% 0D et% 0A).

+1

Une combinaison de% 25 et% 23 a fonctionné pour moi: 'http: //example.com? Foo =% 25 & bar = http: // exemple.com /% 23/baz' –

3

Pour la nouvelle ligne, ajoutez la nouvelle ligne comme < BR> et double encode elle aussi, il est interprété avec succès comme nouvelle ligne dans le nouveau message

+1

Cela ne semble plus fonctionner. –

4

Voici comment je le fais:

  1. exécuter un window.escape sur ces caractères: & ' " # > < \

  2. une course encodeURIComponent sur la chaîne complète

cela fonctionne pour la plupart de mon cas. si newline (\n) est encore un problème, mais je remplace \ n avec de l'espace dans mon cas et cela a bien fonctionné.