Что не так с помещением пробелов в переменные $ _GET

Если у меня, например, мой url выглядит как index.php? Category = IT% 20 &% 20Soft. Затем я пытаюсь напечатать «$ _GET [category]», я получаю только «IT», а не «IT & Soft». Что здесь не так? Меня это расстраивает.

    Проблема заключается не в пространствах, а в амперсанде.

    Вместо этого используйте %26 :

    index.php?category=IT%20%26%20Soft

    Амперсанд указывает, что вы начинаете другое поле (например, category=IT&subcategory=somethingelse ). Вы можете увидеть список зарезервированных символов в Википедии .

    Пробелы и амперсанды (&) недействительны и должны быть закодированы для использования в значениях параметров. Запустите свои аргументы с помощью «urlencode», чтобы создать безопасные значения параметров URL.

    http://php.net/manual/en/function.urlencode.php

    & является зарезервированным символом в URL-адресах HTTP и URI (обычно называемом ссылкой или гипертекстовой ссылкой). Это & именно эта точка, которая будет определять новую запись $_GET . Так что это уже не часть предыдущей записи $_GET . Предыдущий – тот, который вы хотели бы использовать. Так что на самом деле & внутри категории является причиной ваших головных болей:

     URL: http://example.com/script.php?hello=world&foo=bar ^ ^^^ PHP: $_GET['hello'] // "world" $_GET['foo'] // "bar" 

    Поэтому просто помните: в URL-адресе символ & отделяет один параметр URL от другого.

    Но это не означает, что ваша проблема не решена. Вы можете передать значения, содержащие символ & через параметр URL. Существует очень простой способ получить & символы в определенное значение $_GET .

    Значения упаковки для интернет-тура

    Но будьте осторожны: вы можете посмотреть прямо сейчас на уровне ввода (это та часть, где данные поступают в $_GET и другие переменные) вашего приложения. Но для решения этого вам нужно посмотреть на обратное – на выходной уровень (именно там вы отправляете HTML).

    Зачем? Потому что выход станет входом вашего скрипта. Поэтому, если выход уже ошибочен, вход никогда не может быть готов к использованию.

    Учтите, что каждый URL-адрес, который ваше приложение отправляет в браузер (например, как часть HTML-ссылки <a href=""> ), представляет собой новую команду с ее конкретными параметрами для переменных вашего скрипта $_GET . Технически эта часть называется query или частью queryinfo URL-адреса URI / URL.

    Поэтому, если URL-адрес уже создан таким образом, что он создаст неправильные параметры $_GET для вашего скрипта, уже слишком поздно. Таким образом, вы посмотрите на результат, чтобы исправить исходную причину.

    Поэтому вместо этого вам нужно посмотреть в том месте, где вы создаете URL-адрес, и сделать правильный вывод уже там, чтобы позже получить $_GET['category'] .

    В каждом месте вывода ссылок необходимо убедиться, что каждое значение правильно закодировано . Это волшебное слово, которое содержит решение вашей проблемы. Термин лучше искать в словаре, чем в технической документации.

    Тип кодирования для значений, необходимых для параметров $_GET – это так называемая кодировка URL- кода для URL-адресов – имеет смысл, правильно? URL, encoding = URL-кодирование.

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

    Звуки, вероятно, немного сложны, но хорошая новость заключается в том, что вам в первую очередь нужно знать, что PHP как язык веб-скриптов предлагает функцию, которая выполняет эту кодировку для вас. Он называется urlencode() и вы можете использовать его для любого значения для создания своих URL-адресов. На самом деле это довольно обычная задача в веб-приложении, поэтому, если вы только знали раньше, но до тех пор, давайте посмотрим какой-то код, не так ли?

    Кодирование URL-параметров с помощью PHP

    Я должен догадаться, как это выглядит на вашем конце, но вы также можете добавить свой код и к своему вопросу (код вывода), чтобы вам было проще дать вам код, который вы можете «просто» использовать. Допустим, у вас есть что-то похожее, чтобы вывести ссылку:

     <a href="index.php?category=<?php echo $category ?>"> 

    Это выводит содержимое $category же, как и оно . Но это приводит к неправильным URL-адресам, которые нарушают ваш скрипт.

    Таким образом, значение $category должно быть закодировано. Это похоже на то, чтобы положить его в конверт, чтобы он мог достичь цели целиком. Давайте сделаем это, используя функцию urlencode я только что упомянул:

     <a href="index.php?category=<?php echo urlencode($category) ?>"> 

    Как вы можете видеть, просто вставляя значение в функцию urlencode заботитесь, чтобы данные были правильно закодированы. Готов добраться до места назначения, ничто не сможет его сломать.

    Как всегда: это просто, когда вы знаете, как это сделать. URL-адреса должны быть надлежащим образом написаны, и, особенно, значения параметров должны быть правильно закодированы, чтобы предотвратить проблемы с работой на противоположном конце: уровень ввода.

    Удачи вам.

    Строка запроса использует символ & как разделитель для разделения параметров. В основном вам нужно будет сбежать от него до %26 .

     index.php?category=IT%20%26%20Soft