&
- зарезервированный символ в HTTP-URL и 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
часть HTTP URI / URL.
Так что, если URL уже построен таким образом, что он создаст неправильные параметры $_GET
для вашего сценария уже слишком поздно.Итак, вы посмотрите на выходные данные, чтобы исправить исходную причину.
Итак, вместо этого вам нужно посмотреть место, где вы создаете URL, и сделать правильный вывод уже там, чтобы потом получить $_GET['category']
.
В каждом месте вывода ссылки необходимо убедиться, что каждое значение правильно закодировано .Это волшебное слово, которое содержит решение вашей проблемы.Термин, который лучше искать в словаре, чем в технической документации.
Тип кодирования для значений, необходимых для параметров $_GET
, - это так называемое кодирование URL - кодировка для URL - имеет смысл, верно?URL, кодировка = URL-кодировка.
Кодирование значений для URL-адресов на самом деле заботится о том, чтобы значение параметра снова было доступно в вашем скрипте, в отличие от разрыва значений и, в конце концов, даже технического уничтожения URL-адреса.
Звучит, вероятно, немного сложно, но хорошая новость заключается в том, что вам, прежде всего, нужно знать, что PHP как язык веб-сценариев предлагает функцию, которая выполняет эту кодировку за вас.Он называется urlencode()
, и вы можете использовать его для любого значения для создания своих URL.На самом деле это довольно распространенная задача в веб-приложении, так что если вы знали только раньше - но до тех пор давайте посмотрим некоторый код, верно?
Кодирование параметров URL с помощью PHP
IЯ должен немного догадаться, как это выглядит с вашей стороны, но вы также можете добавить свой код к своему вопросу (выходной код), чтобы было легче дать вам код, который вы можете «просто» использовать.Допустим, у вас есть что-то похожее на это для вывода ссылки:
<a href="index.php?category=<?php echo $category ?>">
Это вывело бы содержимое $category
просто как .Но это приводит к неправильным URL-адресам, которые нарушают ваш сценарий.
Поэтому вместо этого необходимо кодировать значение $category
.Это все равно что положить его в конверт, чтобы убедиться, что оно достигнет цели в целом.Давайте сделаем это с помощью функции urlencode
, о которой я только что упомянул:
<a href="index.php?category=<?php echo urlencode($category) ?>">
Как видите, простое помещение значения в функцию urlencode
обеспечивает правильную кодировку данных.Готовы добраться до места назначения, ничто больше не сможет его сломать.
Как всегда: это просто, когда знаешь как.URL-адреса должны быть написаны правильно, и особенно значения параметров должны быть правильно закодированы, чтобы предотвратить возникновение проблем на противоположном конце: Уровень ввода.
Удачи с вашим термином.