Кодировка 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 ответа
Вот как я это делаю:
запустить
window.escape
на эти символы:& ' " # > < \
запустить
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.