Несовместимая кодировка 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"