2010-10-06 1 views
1

Использование PHP. Мне нужно проверить, есть ли у меня URL-адрес для добавления значения параметра или нет.Как проверить, имеет ли URL-адрес URL-адрес внутри него?

Таким образом, если URL является

http://test.com/url?a=1 

мне нужно добавить на & Ь = 2, т.е.

http://test.com/url?a=1&b=2 

Однако, если URL был

http://test.com/url 

мне нужно добавить

http://test.com/url?b=2 

Можно ли проверить это на PHP? В итоге мне нужно прикрепить параметр b = 2 с помощью правильного символа разделителя («?», Если в существующей ссылке не было ни одного «&», если в существующей ссылке уже есть «?»).

ответ

3

Не проверять, но собрать новый один
использование массива $ _GET и http_build_query функции()

+0

ОК спасибо, интересная идея! Я раньше не использовал массив _GET, как бы я его использовал, имея в виду, что я не знаю, сколько частей он может разделить URL? – kitenski

+0

@kitenski вам не нужно заботиться. Это будет сделано автоматически. –

+0

ОК спасибо, и, пожалуйста, извините мое невежество, но не могли бы вы дать мне пример того, как будет работать массив _GET? – kitenski

1

Вы можете использовать parse_url(). Затем используйте parse_str(), чтобы получить фрагменты запроса, изменить массив и использовать http_build_query() для воссоздания строки запроса.

0

С помощью этой функции вы можете позвонить set('b', 2) или установить сразу несколько значений с помощью set(array('a' => 1, 'b' => 2, 'c' => 3)).

function set($name, $value='', $vars='') { 
    if (!$vars) $vars = $_SERVER['QUERY_STRING']; 
    parse_str($vars, $a); 
    if (!is_array($name)) $name = array($name => $value); 
    foreach ($name as $k => $v) { 
     $a[$k] = $v; 
     if ($v === '') unset($a[$k]); 
    } 
    $q = ''; 
    foreach ($a as $k => $v) $q .= ($q ? '&' : '') . $k . '=' . $v; 
    return $q ? '?' . $q : ''; 
}