Кодировка URI в почте Yahoo, составляющая ссылку

У меня есть веб-приложение для создания ссылок. Я хотел бы упростить пользователям отправку по электронной почте ссылок, которые они создают, другим пользователям, используя 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 ответа

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

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

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

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

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

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

Если вы дважды закодируете якорь, он будет правильно интерпретирован 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).

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

Другие вопросы по тегам