Несовместимая кодировка uri window.history.pushState

Взять адрес URL www.somesite.com/@user1

Если я нажму на старый добрый <a href... гиперссылка, содержащая ссылку, то @ проценты закодированы в %40 в адресной строке.

Если я использую HTML5 window.history.pushstate("object or string", "Title", 'www.somesite.com/@user1') @ не является endocded - вместо этого он отображается как символ '@'.

Это несоответствие беспокоит меня. Может быть, есть способ сделать поведение последовательным?

Я рассмотрел encodeURIComponent('www.somesite.com/@user1') для ссылки pushstate, но это также кодирует '/', и я надеюсь, что для <a href... гиперссылка не кодирует символ '@'.

1 ответ

Использование encodeURIComponent заставляет JavaScript предполагать, что нет специальных символов HTTP, которые следует игнорировать. сначала извлеките compnenet:

var url = "www.somesite.com/@user1";
var atPos = url.indexOf('@');
var urlComp= url.slice(atPos);  //@user1
url = url.slice(0, atPos);
url += encodeURIComponent(urlComp); //"www.somesite.com/%40user1"
Другие вопросы по тегам