Если у меня, например, мой 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.
&
является зарезервированным символом в 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-адресов. На самом деле это довольно обычная задача в веб-приложении, поэтому, если вы только знали раньше, но до тех пор, давайте посмотрим какой-то код, не так ли?
Я должен догадаться, как это выглядит на вашем конце, но вы также можете добавить свой код и к своему вопросу (код вывода), чтобы вам было проще дать вам код, который вы можете «просто» использовать. Допустим, у вас есть что-то похожее, чтобы вывести ссылку:
<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