Подтвердить что ты не робот

Кодировка url-Encode и Base64 (использование)?

Мне было интересно...

(кроме вопроса с знаком base64 плюс "+" в строке запроса, который переводится в "пробел" и может быть разрешен% 2b): --- > , который является предпочтительным способом передачи данных в строку запроса

Обе функции могут использоваться с помощью команд JS:

  • btoa
  • encodeUriComponent

поэтому я спрашиваю себя (и вы):

, когда следует использовать , что? (ive всегда использовал encodeUriCompoonent - по инстинкту).

проблема, что определения различны - но реализации могут быть похожими...

изменить

Я думаю, что я нашел причину для запроса.... (и почему никто не спросил его раньше)

enter image description here

4b9b3361

Ответ 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 транспортируем.