Как изменить переменные в ссылке foo?q= some

#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)