Кодировка URI в почте Yahoo создает ссылку - PullRequest
4 голосов
/ 27 октября 2009

У меня есть веб-приложение для создания ссылок. Я хотел бы упростить пользователям отправку по электронной почте ссылок, которые они создают, другим пользователям, используя gmail, почту Yahoo и т. Д. У почты Yahoo есть особая причуда, для которой мне нужно обходное решение.

Если у вас есть учетная запись Yahoo, перейдите по этой ссылке:

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

Обратите внимание, что Yahoo перенаправляет на определенный почтовый сервер (например, http://us.mc431.mail.yahoo.com/mc/compose).. При этом он декодирует шестнадцатеричные коды. Один из них,% 23, является хеш-символом, который недопустим в параметре строки запроса значение. Вся информация после потери% 23.

Все мои ссылки не работают, и использование другого символа невозможно.

Звонок us.mc431.yahoo.com напрямую работает для меня, но, вероятно, не для всех пользователей, в зависимости от их местоположения.

Я попытался установить html = true | false, поместив URL-адрес в HTML-тег. Ничего не работает Кто-нибудь получил надежный обходной путь для этой специфической причуды?

Примечание: любой обходной путь на сервере для меня не является началом. Это должна быть связь между Yahoo и конечным пользователем.

Спасибо

Ответы [ 4 ]

4 голосов
/ 06 декабря 2012

Вот как я это делаю:

  1. Запустите window.escape на этих символах: & ' " # > < \

  2. запустить encodeURIComponent на полную строку

это работает для большей части моего случая. хотя перевод строки (\n) по-прежнему является проблемой, но я заменяю \ n пробелом в моем случае, и он работал нормально.

3 голосов
/ 01 декабря 2010

Последние пару часов я сталкивался с той же проблемой, и я нашел обходной путь!

Если вы дважды закодируете якорь, он будет правильно интерпретирован Yahoo. Это означает изменение% 23 на% 2523 (знак процента закодирован% 25).

Итак, ваш URI будет:
http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%2523anchor

Тот же обходной путь можно использовать для амперсанда. Если вы только закодируете это как% 26, то Yahoo преобразует это в "& amp;" который откажется от остальной части сообщения. Процедура та же, что и выше - измените% 26 на% 2526.

Я до сих пор не нашел решения проблемы новой строки (% 0D и% 0A).

3 голосов
/ 03 июля 2011

Для новой строки добавьте новую строку как
и дважды ее закодируйте, она успешно интерпретируется как новая строка в новом сообщении

1 голос
/ 27 октября 2009

Я думаю, вы зависите от того, что делает сервер Yahoo, когда он отправляет HTTP-перенаправление. Кажется, что должен сохранить URL, экранирующий при перенаправлении, но это не так. Однако, не зная их базового приложения, трудно сказать, почему это не так. Возможно, это просто непреднамеренный побочный эффект (или ошибка), или, возможно, некоторые функции Javascript на этой странице требуют от них некоторого разбора с хэш-тегом.

...