Данные, переданные на другие страницы через гиперссылку, обрезаются

У меня есть форма, которая содержит 2 <select> , первый выбор автоматически заполняется при загрузке страницы, тогда как второй выбор заполняется на основе выбора, выбранного в первом выборе.

Чтобы выполнить это, всякий раз, когда изменяется состояние выбора, выбранное значение в первом будет передано на отдельную страницу, где используется для заполнения второго <select>

проблема

Выбранное значение (Food & Beverages в этом случае), которое проходит через URL-адрес, отключается наполовину, в результате чего неполная строка должна быть отправлена ​​на страницу обработки для второго, что не позволяет ее выполнить.

Шаги, предпринятые для определения проблемы, я повторил значения, которые передаются по URL-адресу, и получил только «Продовольствие», а остальная часть строки была отключена. Я попробовал заменить строковые значения на Food and Beverage, и все это прекрасно работает, что привело меня к выводу, что строка отключается из-за знака амперсанда (&), который заставляет компьютер обрабатывать часть строки после амперсанда в качестве другого значения, которое должно быть передано через URL. Однако, поскольку я не назначал его переменной, он не проходит.

Вопрос

Есть ли какой-либо способ передать значение без его обрезания?

Извлечение кода:

Страница обработки

 <?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?> в <?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?> в <?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?> 

Код JQuery

 $(document).ready(function(){ $('#BusinessCreateCategory').load('getbusinesscategory.php'); $('#BusinessCreateCategory').change(function(){ var category=$('#BusinessCreateCategory').val(); window.location.href='getbusinesssubcategory.php?category='+category; }); 

EDIT: пробовал encodeURIComponent, но данные не закодированы, так как я могу видеть по URL-адресу обработчика apge, что он отключен на амперсанде. Тем не менее, если бы я вручную вводил URL-адрес в качестве строки, а затем кодировал его, используя encodeURIComponent, он работает чудесно. Кто-то пролил некоторый свет на то, почему я не могу кодировать $ ('# BusinessCreateCategory'). val (); ? Благодаря!

E.gThis работает

 var category="Food & Beverages"; var encoded =encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded; 

Например, это не

 var category=$('#BusinessCreateCategory').val(); var encoded= encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded; 

Если это помогает, данные, которые я пытаюсь передать через URL, берутся из моей базы данных.

Прежде чем использовать его в URL-адресе, необходимо encodeURIComponent значение для категории.

 $('#BusinessCreateCategory').change(function(){ var category=$('#BusinessCreateCategory').val(); var encoded = encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded; }); 

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

Ограничение браузера ограничено количеством символов. У вас есть пример полной строки, которую вы пытаетесь передать? Вначале я подозревал, что это может быть проблема с кодировкой.

encodeURIComponent для кодирования передаваемой строки.

Значение должно быть закодировано, но когда вы запрашиваете свой db, он может искать точное совпадение, если вы не видите какой-либо вывод через кодированную строку, используйте decodeURIComponent для декодирования строки перед передачей ее в db. Проверьте вывод на phymyadmin перед тем, как вы официально разместите код.