#php #regex #get
#php #регулярное выражение #получить
Вопрос:
Рассмотрим php-скрипт, посещаемый с URL of foo?q=someamp;s=3amp;d=new
. Интересно, существует ли практический метод для анализа URL-адреса для создания ссылок с новой переменной (на странице php). Например foo?q=**another-word**amp;s=3amp;d=new
, или foo?q=another-wordamp;s=**11**amp;d=new
Я подумываю о том, чтобы перехватить запрошенный URL с помощью $ _SERVER[‘REQUEST_URI’], а затем выполнить синтаксический анализ с помощью регулярного выражения; но на практике это не очень хорошая идея. Должен быть удобный способ анализа переменных, прикрепленных к php-скрипту. На самом деле, обратное действие метода GET .
Комментарии:
1. Для «обратного действия метода GET» вы хотите предложить метод HTTP GIVE? ;o)
2. Нет, я имел в виду что-то вроде parse_url, но не для всего URL-адреса; просто только запросы. Ваша идея довольно хороша; Я просто подумал, что для этого может быть более конкретная функция.
Ответ №1:
$_GET
Переменная содержит уже проанализированный массив текущей строки запроса. Оператор объединения массива
упрощает объединение в него новых значений. http_build_query
объединяет их обратно в строку запроса:
echo 'foo?' . http_build_query(array('q' => 'another-word') $_GET);
Если вам нужно больше синтаксического анализа URL для получения 'foo'
, используйте parse_url
на REQUEST_URI
.
Ответ №2:
Как насчет использования http_build_query
? http://php.net/manual/en/function.http-build-query.php
Это позволит вам создать строку запроса из массива.
Ответ №3:
Я бы использовал parse_str
:
$query = 'q=someamp;s=3amp;d=new';
parse_str($query, $query_parsed);
$query_parsed['q'] = 'foo-bar';
$new_query = implode('amp;', array_map(create_function('$k, $v',
'return $k."=".urlencode($v);'),
array_keys($query_parsed), $query_parsed));
echo $new_query;
Результат:
q= foo-baramp;s = 3amp; d=new
Хотя этот метод может выглядеть как «трудный путь» 🙂
Комментарии:
1. Конечно, изобретать
http_build_query
заново — это «делать это трудным путем». : o)