2016-01-27 4 views
1

У меня есть URI подобное:encodeURI не избегает `equals` - почему?

http://client.dev/dap/module/hdfs-web/api/v1.0/clusters/Cluster%201%20-%20CDH4?operation=copy&to=/user/hdfs/year=2016/partial.txt&overwrite=true 

я использую encodeURI функцию, чтобы избежать строки. Мне интересно, почему пробелы закодированы с %20, а equals символов нет?

+2

Поскольку '=' является собственным URI характер? – putvande

+0

'=' имеет значение в URI - он связывает «ключи» с «значениями», символ пробела не является, это просто немного строки, чтобы облегчить нам людей различать слова. – somethinghere

ответ

5

encodeURI кодирует полный URI, а URI могут содержать = символов. Например, если пользователь вводит в URI, первым шагом для его решения было бы называть encodeURI.

С другой стороны, вы строите URI, и ввод только определяет одно поле (например, поисковый запрос, если задан E=mc², который вы хотите разрешить https://www.google.com/search?q=E%3Dmc%C2%B2), то вы не кодируете полный URI, но URI Компонент. Используйте encodeURIComponent для этого:

> encodeURIComponent('= ') 
'%3D%20' 
+0

спасибо, не могли бы вы немного рассказать о том, когда 'encodeURI' и когда' encodeURIComponent' следует использовать? А также каковы последствия слепо замены 'encodeURI' на' encodeURIComponent'? –

+0

Я обновил ответ. Если вы используете 'encodeURIComponent' для кодирования полного URI, это будет ломаться для большого количества входов, поэтому вы не можете слепо заменить его. – phihag

2

encodeURI() функция используется для кодирования URI.

Эта функция кодирует специальные символы, за исключением: ,/? : @ & = + $ # (для кодирования этих символов используйте encodeURIComponent()).

Совет: Используйте функцию decodeURI() для декодирования закодированного URI.

ИСТОЧНИК: W3Schools

Смежные вопросы