URLEncode - заставить его работать так, как я хочу - PullRequest
1 голос
/ 21 марта 2011

Я хочу, чтобы URL кодировал адреса электронной почты. Я ввел «bmackey@foo.com» в w3schools, , но он не кодировал «@» или «.». Я использую encodeURI() и имею те же результаты. Что происходит?

По крайней мере, я предполагаю, что это не кодировало, потому что я вижу на вкладке FireBug Net:

GET <a href="http://dev:8989/SJMUserManager/Service/Index/bmackey@foo.com" rel="nofollow">http://dev:8989/SJMUserManager/Service/Index/bmackey@foo.com</a>

Я ожидал увидеть

GET <a href="http://dev:8989/SJMUserManager/Service/Index/bmackey%40foo%2Ecom" rel="nofollow">http://dev:8989/SJMUserManager/Service/Index/bmackey%40foo%2Ecom</a>

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

@ и . не являются специальными символами в HTTP-URI.

Символы, которые необходимо кодировать, включают пробел (который становится +), + сам по себе и %, которыйиспользуется для шестнадцатеричного кодирования.

Другие символы вне нормального диапазона ASCII 32–127 и различные другие символы в этом диапазоне используют это % шестнадцатеричное кодирование.

Для правильной обработки выследует рассмотреть возможность использования encodeURIComponent(), но только на той части URI, которая была предоставлена ​​пользователем.Если вы закодируете весь URI таким образом, вы получите недопустимый URI.

2 голосов
/ 21 марта 2011

Вместо этого вы можете попробовать encodeURIComponent.

encodeURIComponent('GET http://dev:8989/SJMUserManager/Service/Index/bmackey@foo.com')

Return:

"GET%20http%3A%2F%2Fdev%3A8989%2FSJMUserManager%2FService%2FIndex%2Fbmackey%40foo.com"
0 голосов
/ 21 марта 2011

@ является зарезервированным символом, и поэтому не закодирован, вы можете увидеть ссылку на: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI

...