Кодировка url-Encode и Base64 (использование)?
Мне было интересно...
(кроме вопроса с знаком base64 плюс "+" в строке запроса, который переводится в "пробел" и может быть разрешен% 2b): --- > , который является предпочтительным способом передачи данных в строку запроса
Обе функции могут использоваться с помощью команд JS:
поэтому я спрашиваю себя (и вы):
, когда следует использовать , что? (ive всегда использовал encodeUriCompoonent
- по инстинкту).
проблема, что определения различны - но реализации могут быть похожими...
изменить
Я думаю, что я нашел причину для запроса.... (и почему никто не спросил его раньше)
![enter image description here]()
Ответы
Ответ 1
base64 используется для передачи двоичных данных. (не поддерживается в IE, не может кодировать пространственные символы.)
encodeURIComponent кодирует только специальные символы.
Интересно, что вы не можете применять base64 для unicode-строк без encodeURIComponent:
https://developer.mozilla.org/en/DOM/window.btoa
Ответ 2
Ответ на это полностью зависит от вашего серверного приложения.
'+' не переводится клиентом в "пространство" - он автоматически переводится на 'space' на каком-либо сервере (в основном, для соображений обратной совместимости (наоборот, некоторые серверные приложения оставляют "+" как '+' в соответствии с RFC3986).
Что касается клиента - btoa()
и encodeURIComponent()
(и encodeURI()
и escape()
) просто кодируют строку текста в разные абстрагированные строки в соответствии с различными алгоритмами кодирования или экранирования - btoa()
обычно создает наименьшую результирующую строку с использованием base64, но meze comment re: unicode стоит учесть здесь.
Важно отметить, что ваше серверное приложение (некоторые настройки на основе ASP.NET в вашем случае) затем использует для декодирования этой строки обратно к исходной форме.
Ответ 3
fwiw, я использую base64 всякий раз, когда хочу переносить все, что МОЖЕТ быть unicode, между сервером и клиентом. urlencode не обрабатывает все unicode charachters все, что хорошо. Он быстро получает беспорядок со всеми процентными знаками.
Итак, короче: ожидая ввода/вывода unicode, всегда base64 транспортируем.