Как я могу остановить браузер от значений формы кодировки URL на GET - PullRequest
11 голосов
/ 01 июня 2010

У меня есть форма с method="get". В форме мне нужно передать URL файла CSS, но он кодирует его в http%3A%2F%2Fwww... и т. Д.

Есть ли способ остановить кодировку URL, так как он нарушает работу файла.

Спасибо

Ответы [ 6 ]

13 голосов
/ 01 июня 2010

Фон

Это немного тоньше, чем можно подумать с первого взгляда. Для любого URL, который является специфической формой стандарта URI, определенные символы являются специальными. Среди специальных символов : (разделитель схемы) и / (разделитель пути или иерархии), вот полный список зарезервированных символов из RFC-2396 :

reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
              "$" | ","

Это не имеет ничего общего с безопасностью, гораздо больше с простым следованием стандарту: эти символы означают нечто особенное в любом URI, URL или URN. Когда вам нужно использовать их как часть пути или строки запроса (запрос GET создает для вас строку запроса), вам необходимо их избежать. Краткая версия экранирования: возьмите байты UTF-8 как шестнадцатеричные и поставьте перед ними знак %. В случае зарезервированных символов это всегда однобайтовый символ в UTF-8, и поэтому он экранируется как две шестнадцатеричные цифры.

Путь к решению

Вернемся к вашей проблеме. Вы не упомянули, какой язык вы используете. Но любой язык, который работает с Интернетом, имеет способ кодирования или декодирования URL. У некоторых есть вспомогательные функции для декодирования целого URL, но обычно вам лучше разбить его на пары имя / значение и затем декодировать его. Это даст вам абсолютный URL-путь, который вам нужен.

Примечание: лучше всего всегда декодировать значения запроса, просто потому, что когда люди вводят значение, они не будут знать, зарезервировано ли это значение, и браузер закодирует его для вас. Невыполнение этого требования создает угрозу безопасности.

РЕДАКТИРОВАТЬ: Когда вам нужно декодировать внутри страницы, а не на стороне сервера, вам понадобится JavaScript для выполнения этой работы. Посмотрите на эту страницу для en / decoding URLs или используйте Google, чтобы найти много других.

6 голосов
/ 01 июня 2010

Нет, вы не можете. Кодировка необходима для создания правильного URL.

Вместо этого, декодируйте значение в принимающем коде (на какой платформе вы в любом случае находитесь, декодирование URL обычно выполняется автоматически)

2 голосов
/ 01 июня 2010

Нет по соображениям безопасности, вы не можете сделать это. Вы должны собрать и расшифровать его на приемном конце.

1 голос
/ 26 октября 2016

Когда вы используете метод FORM и GET и некоторые специальные символы, вы получите браузер, кодирующий полученный запрос. Для более новых браузеров, которые поддерживают изменение URL-адреса без обновления страницы (IE10 +), можно декодировать строку запроса URL-адреса и обновить адрес.

Я использую такой скрипт:

    <script type="text/javascript">
    if (history.pushState) { //IE10+
        var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + decodeURIComponent(window.location.search);
        window.history.pushState({path:newurl},'',newurl);
    }
    </script>

Это преобразует http://example.com/page.html?path=foo%2Fbar обратно в http://example.com/page.html?path=foo/bar

0 голосов
/ 21 января 2018

Вы можете декодировать URL, используя javascript. Функция: decodeURIComponent (Url); Потому что браузер кодирует URL для специальных символов. Например: https://www.example.com кодируется в % 20https% 3A% 2F% 2Fwww.example.com . Здесь специальные символы заменяются на% и его значение ASCI.

0 голосов
/ 29 августа 2016

Если вы использовали XMLHttpRequest, вы можете отправлять текст без кодировки. Вы можете использовать JavaScript для этого, но не забудьте установить content-type на text/plain.

content-type: text/plain
...