Передача имени файла браузеру Firefox приводит к замене пробелов на %2520
вместо %20
.
У меня есть следующий HTML-код в файле с именем myhtml.html
:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Когда я загружаюсь myhtml.html
в firefox, изображение отображается как неработающее. Итак, я щелкаю правой кнопкой мыши ссылку, чтобы просмотреть изображение, и оно показывает этот измененный URL:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
Какого черта? Он превратил мое пространство в файл %2520
. Разве это не должно преобразовывать его в %20
?
Как мне изменить этот HTML-файл, чтобы браузер мог найти мое изображение? Что тут происходит?
источник
http://mysite/test & that... If I use
UrlEncode`,http://mysite/test%20&%20that
но я также хочу&
изменить его на% 26, так что это mysite / test% 20% 26% 20that `Как я могу это сделать?По какой-то - возможно, действительной - причине URL-адрес был закодирован дважды.
%25
это%
знак urlencoded . Итак, исходный URL-адрес выглядел так:Затем он был закодирован один раз:
и дважды:
Таким образом, вам не следует делать urlencoding - в вашем случае - поскольку другие компоненты, похоже, уже это делают для вас. Используйте просто пробел
источник
Когда вы пытаетесь посетить локальное имя файла через браузер Firefox, вы должны принудительно использовать
file:\\\
протокол ( http://en.wikipedia.org/wiki/File_URI_scheme ), иначе firefox закодирует ваше пространство ДВАЖДЫ. Измените фрагмент html следующим образом:к этому:
или это:
Затем firefox получает уведомление о том, что это локальное имя файла, и он правильно отображает изображение в браузере, правильно кодируя строку один раз.
Полезная ссылка: http://support.mozilla.org/en-US/questions/900466
источник
Следующий фрагмент кода решил мою проблему. Думал, что это может быть полезно другим.
Вместо использования по умолчанию
encodeURIComponent
моя первая строка кода преобразует всеspaces
вhyphens
использование шаблона регулярного выражения,/\s\g
а следующая строка просто выполняет обратное, т.е. преобразует всеhyphens
обратно вspaces
использование другогоregex pattern /-/g
. Вот/g
собственно и отвечает заfinding all
соответствие символов.Когда я отправляю это значение в свой вызов Ajax, оно проходит как
normal spaces
или просто%20
и, таким образом, избавляется отdouble-encoding
.источник
Попробуй это?
encodeURIComponent('space word').replace(/%20/g,'+')
источник