Я передавал запрос на страницу результатов поиска с переменной ?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"
Используйте следующие шаги:
Надеюсь это поможет 🙂
Это исходный патч, который я построил, который принимает массив и ищет пустые ключи и объединяет их в строку. Он работает только при передаче одной переменной.
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