Intereting Posts
Как вызвать список продуктов в представлении produt Magento Установка значения текстовой области HTML-формы? Переключить идентификационные номера двух строк в MySql mysqli подготовленный оператор – не обновлять значения NULL Может ли внутренняя сеть PHP совместно использовать учетные записи Windows? DropzoneJS: Как получить ответ PHP после успешной загрузки? API Youtube: учетная запись службы загрузка файла через ajax с помощью php ffmpeg / PHP – Проблемы с конвертированием любого видеоформата в ogg – Choppy Video / No Audio – win64 Как использовать активную загрузку здесь, я имею в виду только одну переменную вместо двух. Поэтому мне не нужно запускать два отдельных запроса Масштабирование HTML из расшифрованных PDF-файлов Иногда вызов ajax изменяется с POST на GET Как позволить регулярному выражению игнорировать все между скобками? HTML5 тип входного файла с несколькими атрибутами не работает в IE? Как вставить данные json в таблицу?

анализировать незашифрованный URL-адрес

есть внешняя страница, которая передает URL-адрес, используя значение параметра, в строке запроса. на мою страницу.

например: page.php? URL = http://www.domain2.com?foo=bar

я попытался сохранить параметр, используя

$url = $_GET['url'] 

проблема заключается в том, что страница подтверждения не отправляет ее в кодировку. и поэтому он распознает все, что заканчивается «&» в качестве начала нового параметра. Мне нужен способ разобрать URL-адрес таким образом, чтобы что-нибудь затягивало второе «?» является частью или переданным URL, а не фактическим запросом.

Получите полный запрос и затем извлеките его часть URL =

 $name = http_build_query($_GET); $name = substr($name, strlen('URL=')); 

Ответ Антонио, вероятно, лучше всего. Также будет работать менее элегантный способ:

 $url = $_GET['url']; $keys = array_keys($_GET); $i=1; foreach($_GET as $value) { $url .= '&'.$keys[$i].'='.$value; $i++; } echo $url; 

Что-то вроде этого может помочь:

 // The full request $request_full = $_SERVER["REQUEST_URI"]; // Position of the first "?" inside $request_full $pos_question_mark = strpos($request_full, '?'); // Position of the query itself $pos_query = $pos_question_mark + 1; // Extract the malformed query from $request_full $request_query = substr($request_full, $pos_query); // Look for patterns that might corrupt the query if (preg_match('/([^=]+[=])([^\&]+)([\&]+.+)?/', $request_query, $matches)) { // If a match is found... if (isset($_GET[$matches[1]])) { // ... get rid of the original match... unset($_GET[$matches[1]]); // ... and replace it with a URL encoded version. $_GET[$matches[1]] = urlencode($matches[2]); } } с // The full request $request_full = $_SERVER["REQUEST_URI"]; // Position of the first "?" inside $request_full $pos_question_mark = strpos($request_full, '?'); // Position of the query itself $pos_query = $pos_question_mark + 1; // Extract the malformed query from $request_full $request_query = substr($request_full, $pos_query); // Look for patterns that might corrupt the query if (preg_match('/([^=]+[=])([^\&]+)([\&]+.+)?/', $request_query, $matches)) { // If a match is found... if (isset($_GET[$matches[1]])) { // ... get rid of the original match... unset($_GET[$matches[1]]); // ... and replace it with a URL encoded version. $_GET[$matches[1]] = urlencode($matches[2]); } } 

Как вы намекнули в своем вопросе, кодировка URL-адреса, которую вы получаете, не такая, какая вы хотите: a & отметит новый аргумент для текущего URL-адреса, а не тот, который url параметре url . Если URL-адрес был закодирован правильно, значение & было бы экранировано как %26 .

Но, хорошо, учитывая, что вы точно знаете, что все, что указано после url= , не экранировано и должно быть частью значения этого параметра, вы можете сделать это:

 $url = preg_replace("/^.*?([?&]url=(.*?))?$/i", "$2", $_SERVER["REQUEST_URI"]); 

Итак, если, например, текущий URL-адрес:

 http://www.myhost.com/page.php?a=1&URL=http://www.domain2.com?foo=bar&test=12 

Тогда возвращаемое значение:

 http://www.domain2.com?foo=bar&test=12 

Посмотрите, как работает eval.in.