как сделать символ «&» внутри значения в URL?

Я передавал запрос на страницу результатов поиска с переменной ?s= .

Я тестировал сайт, и я обнаружил, что когда у запроса есть символ & в нем, когда я пытаюсь получить $_GET['s'] он обрезается символом &.

Я попытался с & а также преобразовал его в %26 и у меня все еще такая же проблема.

Как я могу кодировать их для передачи их по URL?

РЕДАКТИРОВАТЬ:

Я указал, что пробовал кодировать его до %26 и он все еще не работал.

Я попытался с urlencode() и on ?s=pizza%26pasta когда у меня print_r($_GET) я получаю:

 Array ( [s] => pizza [pasta] => ) 

EDIT 2:

Я только выяснил, что проблема на самом деле связана с .htaccess кажется, что она преобразует «что-то» в «& something =». Не знаю, как исправить это в htaccess.

Это мой файл .htaccess:

 RewriteEngine On RewriteBase / # remove www RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L] # rewrite to action RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^([^/]+)/?$ /a/?s=$1 [L,QSA] 

Url, кодирующий amersand (&) до %26 является правильным способом для этого.

Использование http://yoursite.com?var1=this%26that&var2=other приведет к тому, что суперглобальный массив $_GET имеет две переменные

 $_GET['var1'] = 'this&that'; $_GET['var2'] = 'other'; 

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

 var_dump(urlencode('one&two')); string(9) "one%26two" 

Используйте следующие шаги:

  1. Сначала создайте свою строку в PHP
  2. Затем используйте функцию urlencode () для правильной кодировки вашей строки.
  3. При использовании $ _GET [] убедитесь, что вы используете urldecode (), чтобы получить переменную в исходном формате.

Надеюсь это поможет 🙂

Это исходный патч, который я построил, который принимает массив и ищет пустые ключи и объединяет их в строку. Он работает только при передаче одной переменной.

 function arrayToString($array) { $string = ''; foreach ($array as $key => $value) { if($value) { $string = $string.'&'.$value; } else { $string = $string.'&'. $key; } } return substr($string,1,strlen($string)); } 

Это более чем одна переменная, если кто-то считает ее полезной:

  function arrayToString($array) { $string = ''; foreach ($array as $key => $value) { if($value) { $string = $string.'&'.$key.'='.$value; } else { $string = $string.'&'. $key; } } return substr($string,1,strlen($string)); } return $string 

Предположим, вы хотите отправить следующую строку в свой URL:

 var1 = "1st Class Ink & Toner" var2 = "Test1" var3 = "test3" 

Теперь, используя php,

 var1 = urlencode(var1); left remain the same. 

затем поместите их в URL: http://url.com/x=var1&y=var2&z=var3

vKj