2011-12-28 2 views
5

У меня есть следующий скрипт для чтения запроса в URL:PHP REQUEST_URI

$id = '/' != ($_SERVER['REQUEST_URI']) ? 
    str_replace('/?id=' ,"", $_SERVER['REQUEST_URI']) : 0; 

Он используется, когда URL является http://www.testing.com/?id=123

Но теперь я хочу передать больше 1 переменной в строке адреса http://www.testing.com/?id=123&othervar=123

Как изменить код выше для извлечения обеих переменных?

ответ

11

Вы можете использовать регулярное выражение или продолжать использовать str_replace.

Например.

$url = parse_url($_SERVER['REQUEST_URI']); 

if ($url != '/') { 
    parse_str($url['query']); 
    echo $id; 
    echo $othervar; 
} 

выход будет: http://www.testing.com/123/123

+0

Ударьте меня! Кроме того, рассмотрите возможность использования $ _SERVER ['QUERY_STRING'] для упрощения. –

+0

, так что это было бы что-то вроде $ url = $ _SERVER ['REQUEST_URI']; if ($ url! = '/') { $ id = str_replace ('/? Id =', null, $ _SERVER ['REQUEST_URI']); $ othervar = str_replace ('& othervar =', '/', $ _SERVER ['REQUEST_URI']); } echo $ id // 123 echo $ othervar // 123 – user1118904

+0

Я бы также рассмотрел возможность использования сопоставления с образцом. – nand

1

возможно

$id = isset($_GET['id'])?$_GET['id']:null; 

и

$other_var = isset($_GET['othervar'])?$_GET['othervar']:null; 
5

Я думаю, что parse_str является то, что вы ищете, что-то вроде этого нужно сделать трюк для вас:

parse_str($_SERVER['QUERY_STRING'], $vars); 

Затем массив $vars будет содержать все переданные аргументы.

+0

wow thats great: D спасибо! – user1118904

0

С вары прошли через URL в $ _GET вары, вы можете использовать функцию filter_input():

$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); 
$othervar = filter_input(INPUT_GET, 'othervar', FILTER_SANITIZE_FULL_SPECIAL_CHARS); 

Он будет хранить значения каждого вар и дезинфицировать/проверить их.

Смежные вопросы