Удалить определенную переменную из строки запроса - PullRequest
1 голос
/ 03 апреля 2011

Как удалить определенную переменную из строки запроса?Скажем, у меня есть строка запроса

$query_string = "first=val1&second=val2&third=val3";

function removevar($var, $query_string) {
    return preg_replace("/(".$var."=[^&]*(&))/i","",$query_string);
}

echo removevar("first",$query_string); // ok
echo removevar("second",$query_string); // ok
echo removevar("third",$query_string); // doesn't change the string because third doesn't have a trailing &

Как это можно исправить, чтобы надежно удалить переменные из строки запроса?Возможно, у кого-то уже есть функция, которая делает это вместе со специальными случаями в более сложных строках.

Так что мне придется сопоставить либо &, либо конец строки ($), но я незнать, как превратить это в регулярное выражение.

Ответы [ 6 ]

3 голосов
/ 04 апреля 2011
$query_string = "first=val1&second=val2&third=val3";

function removevar($var, $query_string) {
    return preg_replace("/(".$var."=[^&]*(&|$))/i","",$query_string);
}

echo removevar("first",$query_string); // ok
echo removevar("second",$query_string); // ok
echo removevar("third",$query_string); // ok

Это должно сработать.

2 голосов
/ 04 апреля 2011
<?php
$query_string = "first=val1&amp;second=val2&amp;third=val3";
parse_str($query_string, $output);

function removevar($var, $output_array) {
  if (in_array($var, $output_array)) {
    unset($output_array[$var]);
  }

  return http_build_query($output_array, '', '&amp;');
}

echo removevar("first", $output);
echo removevar("third", $output);
?>

Обычно для таких кодов, которые включают строку запроса, всегда лучше использовать встроенные функции PHP, а не синтаксис / формулу регулярного выражения. Это то, что я сделал, и основные части кода включают следующие встроенные функции PHP: -

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

2 голосов
/ 04 апреля 2011

Для этого не обязательно использовать регулярные выражения, поскольку в PHP есть функции, которые могут анализировать и создавать строки запроса (parse_str и http_build_query соответственно):

function removevar($var, $query_string) {
    parse_str($query_string, $args);
    unset($args[$var]);
    return http_build_query($args);
}

Обратите внимание, что вам необходимо декодировать ссылки на символы HTML перед использованием этих функций.

2 голосов
/ 04 апреля 2011

Возможно, вам повезет больше:

  1. html_entity_decode, чтобы получить «обычную» строку запроса.
  2. parse_str, чтобы получить строку запроса в массив.
  3. unset желаемый ключ в этом массиве.
  4. Используйте http_build_query для восстановления строки.
  5. Позвоните htmlspecialchars, чтобы получить & обратно &amp;.

Менее сжатый, чем маршрут регулярных выражений, но гораздо менее подвержен ошибкам.

1 голос
/ 04 апреля 2011

Существуют функции, которые могут обрабатывать строки запроса напрямую.

function removevar ($var, $query_string) {
  $array = array();
  parse_str(html_entity_decode($query_string), $array);
  unset($array[$var]);
  return html_entities(http_build_query($array);
}
1 голос
/ 04 апреля 2011
function removevar($var, $query_string) {
    $query_string = preg_replace("#$var=([^&]+)#is", "", $query_string);
    return trim($query_string, "&amp;");
}
...