Інструменти розробника · URL енкодер & декодер
Чому + стає простір, коли ви декодуєте рядок запиту, і коли він не
· Як працює
Опубліковано ToolAcre · Редакція журналу
виворітна обробка Завантажити плагін розробник-workflow

Чи залежить простір, від якого ви зателефонуєте. Ця пошта пояснює, як decodeURIComponent, URLSearchParams і Server Frameworks кожен ласощ +, і як уникнути повороту реального плюса в простір.
Чому + стає простір, коли ви декодуєте рядок запиту, і коли він не
HTML форма подання заявки/x-www-form-urlencoded формат, де простір стає плюс. Ім'я сервера=Аліса+ Сміт замінює кожен плюс з космосом перед вилученням значення. Коли реальний плюс належить до даних, як в розрахунку 5+3, прибуває на сервері як 5 3 після форми декодування крок. Цей невидимий перетворення є корінь згубності.
JavaScript декодування виробляє різні результати, залежно від яких функцій, які ви використовуєте. URLПошукПараметри лікує як простір, що відповідає поведінці сервера. Але декодуріком листя і доначе, лікуючи його буквально. Цей асиметрія між функціями полягає в тому, що один і той самий вхідний декодує по-різному. Розробник очікує як декодери, щоб виготовити той же результат показує, що вони не можуть.
Два кодування, які виглядають як — RFC 3986 100%-пригода versus/x-www-form-urlencoded
Двох стандартних кодування виглядають як і раніше, але працюють по-різному. RFC 3986 визначає відсоток-відхилення: будь-який характер стає %HH. Космічна стає %20. Додаток/x-www-form-urlencoded стандарт додає шортанду: простір може бути плюс. Ефір працює у вигляді контексту, але плюс є необов'язковою і специфічною для цього стандарту. Вони різні домени з схожим зовнішнім виглядом.
Заява на декодування RFC 3986 тільки декодування. Читає %20 як простір і плюс як літровий плюс. URLПошукПараметри застосовуються у вигляді декодування правил: процентні-парази стануть їх символами, а плюс стає просторим. Дві функції вирішують однакову проблему в різних доменах. Змішуючи їх викликає як реальний плюс в ванілі, або простір, щоб стати плюс і не перетворити.
decodeURIComponent листя + один; URLПошукПараметри перетворює його в простір — два JavaScript поведінкові поведінки
Поведінка сервера змінюється, що з'єднує проблему. Раїлс або Д'янго автоматично застосувати правило форми: плюс стає простір. Але вилучення і вручну декодування сирої кварелі з URL листя декодера плюс непристойний. Виготовлені в різних рамках значення забезпечують різні результати. Серверний код часто ручає це незліченно, приховуючи проблему до тих пір, поки ви не напишіть на замовлення.
Приклад: телефонні номери магазинів +1-555-0100 з плюсом як код країни. Анонім HTML у вигляді %2B1-555-0100 , JavaScript кодування плюс як %2B. Сервер отримує цей. Якщо це стосується декодування, %2B стає плюсом і значення правильно. Якщо кодування проксі-смугів, виклик decodeURIComponent на результат виробляє +1-555-0100. Кожен шар декодує один раз.
Які сервери роблять — загальний каркасний поведінку в рядку запиту та органі замовлення, описаний в загальній послідовності
JavaScript може зашифрувати значення за допомогою кодуРіком. З огляду на +б, він виробляє%2Bb. При цьому закодовані рядок досягає сервера або видалення програми, %2B-коди, як і плюс, і результат правильний. Якщо ви зашифруєте замість того, щоб простір став плюсом і реальним плюсом стає %2B. Ефірний спосіб, кодування виробляє%2Bb. У перекладі залежить від того, що правило, декодування застосовується.
Тестування круглої поїздки: початок з + б. Кодування з кодомURIComponent для отримання%2Bb. Decode a%2Bb з декодуровим компонентом і відновленням +b. Передача +b до URLПошукПошукПоказів: це трактує плюс як простір, що виробляє b. Передача a%2Bb до URLПошукПошукПорами, щоб отримати +b назад. Ви можете використовувати один з одним, який ви використовуєте.
У таблиці працює приклад: 'a+b' і 'a%2Bb' через обох декодерів — чотири результати
Помилки, які слідувати безпосередньо. Розробник декодує декодурі компоненту і чудеса, чому вхідні дані з реальними розбиттями плюсів. Для цього необхідно використовувати URL-адресуПошукПараметри. Якщо вони повинні використовувати декодурові компоненти, і кожен літровий плюс зникне. Закодування двічі виробляє %252B, що вимагає відповідних пар, які закодовують, щоб видалити правильність.
Ще одна помилка полягає в тому, що використовується для обробки запитів, як ?q=value без кодування. Будь-який амперс або дорівнює значенням, мовчно створює новий параметр. Переглядач не несе друге запору; він лікує результат, як правильно сформований. За допомогою енкокодувального компонента використовується лише навмисне кодування. URL енкодер і декодер показує всі три функції, розкриючи те, що кожен виробляє.
Загальні помилки — декодування двічі, або кодування простору як + в сегменті шляху
Правило кодування форми називається додатком/x-www-form-urlencoded тому що він описує HTTP запит на вказаний вище заголовок. HTML формує без додавання файлів, надсилайте тіло в цьому форматі. Використовуються рядки в URL-адресах, які використовують цю конвенцію, але технічно вони не мають офіційного стандартного кодування. URL specs treats як копак; плюс значення не mandated. Але в веб-додатках, як правило, означає простір.
Щоб гарантувати правильній поведінки, кодування навмисно та декодування з функцією узгодження. Якщо Ви закодовані за допомогою кодуРіком, декодування з декодуритом. Як читання HTML у вигляді даних або запитів органів у форматі форми, скористайтеся URLПошукПошукПоказів. Не вгадуйте на основі зовнішнього вигляду. А рядок, як + б, неоднозначна. Декодери не взаємозамінні.
Що це не криється — багаточасткові дані та JSON органам запиту
Багаточасткові дані форми, JSON вимоги до органів та інших стандартів мають окремі правила кодування. JSON не використовує плюс для простору або відсотків-кодування; він використовує Unicode втечу. Багаточастина використовує різні межі. У статті наведено рядки запитів та формовані випадки, оскільки це де з’являється з’являється з’являється неоднозначність плюсів. Завжди перевірте наголовку вмісту та RFC що визначає його.
Завжди закодуйте літровий плюс як %2B, коли він належить до значення запиту. URL енкодер & decoder показує, як плюс захищений як %2B в режимі компонента, відокремлюється від пробілів, які стають %20. Пройдіть +б і a%2Bb через кожен режим, потім перевірте результати. Що таке порівняння показує, чому однакові коди вводу різним чином. Відмінність полягає в правильній поведінці двох різних стандартів.
Поруч: завжди закодуйте літровий плюс як %2B — як URL кодувальника і декодера показує, що значення виглядає як проценти за допомогою кількісного значення
Поруч: плюс в рядку запиту є кодування форми швидше за простір, не ліль плюс, якщо він прийшов від кодування, яка захищена його як %2B. Зловживання знеболюючим засобом втратить захист. URLПошукПараметри є безпечними в сучасних умовах JavaScript; він ручає форму кодування і дає ім'я параметра доступу. Для сирих рядків енкодер UART захищає все; декодурі компоненти інтерпретує %20 і відсотків, але лікує плюс буквально.
Тестувати це: побудувати ?x=a+b вручну і вставити в URL енкодер і декодер. Переглядайте його і див. URLПошукПараметри розбити його на параметр x з значенням b. Paste ?x=a%2Bb і див. значення a+b. Використовуйте кодURIComponent для побудови URL і порівняти. Що таке візуальне підтвердження, що означає правило: використання правил форми плюс, %-відхилення використовує %20, змішування їх, тому плюс ванішів в космос.