2013-06-19 6 views
0

Если у меня есть ссылка в строке как: example.php?this=something&that=somethingelseвернуть определенную часть строки

Как я вернуть только то, что на равных? Итак: somethingelse

Я пробовал pregmatch, но не получил его на работу. Я также не хочу использовать substr, потому что я не уверен, как долго будет 'that'.

Конкретно я имею

user={$md5_id}&activ_code={$activ_code} 

Отправляясь в другую функцию, конечно, я мог бы передать активный код в качестве переменной. Но мне было любопытно.

+1

Существует ли надежный способ узнать, где значение 'that' концов? Другой параметр? Закрытая цитата? Что такое полная строка? –

ответ

1

Попробуйте следующее ...

$str = "example.php?this=something&that=somethingelse"; 
$values = array(); 
$query = substr(strstr($str, "?"), 1); 

parse_str($query, $values); 

echo $values["that"]; 
+0

наиболее применимо к тому, что я делал! спасибо – Alex

+0

рад помочь :) –

4

Вы можете использовать функцию РНР parse_url(), чтобы разобрать сам URL, и parse_str() для синтаксического анализа его параметров

Вот пример фрагмент кода:

$url = "example.php?this=something&that=somethingelse"; 
$query = parse_url($url, PHP_URL_QUERY); 
parse_str($query, $result); 

С выше фрагменте кода, результат вы будете находиться внутри переменной $result['that']

+0

Я прочитал исходный вопрос, и этот код можно использовать для получения параметра, который требуется OP. Я также добавил пример кода –

4

Использовать parse_url (с параметром PHP_URL_QUERY, так как нам нужна только часть запроса (после?) UR L) и parse_str как таковой:

<?php 
    $url = "example.php?this=something&that=somethingelse"; 

    parse_str(parse_url($url, PHP_URL_QUERY), $queryParams); 

    print_r($queryParams); 
    /* 
     Array 
     (
      [this] => something 
      [that] => somethingelse 
     ) 
    */ 
?> 

DEMO


Если у вас есть только строка user={$md5_id}&activ_code={$activ_code} вы можете просто использовать parse_str:

<?php 
    $string = "user=ABC123&activ_code=DEF456"; 

    parse_str($string, $queryParams); 

    print_r($queryParams); 

    /* 
     Array 
     (
      [user] => ABC123 
      [activ_code] => DEF456 
     ) 
    */ 
?> 

DEMO

+0

. Его больше о том, как получить определенную часть URL-адреса, передаваемого в виде строки, но это действительно актуально для нескольких целей, если я прав. – Alex

+0

@Alex Sure делает - не стесняйтесь играть с демонстрацией. – h2ooooooo

+0

Просто добавьте FYI. Вопрос содержит частичный URL-адрес, но, как говорят документы для parse_url: также принимаются частичные URL-адреса, parse_url() пытается наилучшим образом проанализировать их. Таким образом parse_url() может сломаться, но я бы доверял ему больше, чем изобретать собственное колесо с помощью substr() или регулярного выражения. –

1

Вы можете использовать substr() и strstr(), чтобы получить часть запроса строки (все после ?):

$query = substr(strstr($url, '?'), 1) 

И затем использовать parse_str() для разбора строки запроса в переменные

parse_str($query, $vars); 

переменной вам нужно сейчас доступны в $vars массива:

$that = $vars['that']; 
1

Вот полный пример того, как использовать parse_url и parse_str.

Пример кода

$url = "http://test.com/example.php?this=something&that=somethingelse"; 

$url_breakdown = parse_url($url); 
parse_str($url_breakdown['query'], $url_params); 

print_r($url_breakdown); 
print_r($url_params); 

Выход

Array 
(
    [scheme] => http 
    [host] => test.com 
    [path] => /example.php 
    [query] => this=something&that=somethingelse 
) 
Array 
(
    [this] => something 
    [that] => somethingelse 
) 
1

с рабочим preg_match

if(preg_match("/^.+that=(.+)&?$/", "example.php?this=something&that=somethingelse", $matches)) 
    print_r($matches); 

результат

Array 
(
    [0] => example.php?this=something&that=somethingelse 
    [1] => somethingelse 
) 
+0

Я не собираюсь ниспровергать, так как он * делает * работу - но на самом деле? Regex наверняка не для этого. – h2ooooooo

+0

может быть, вы можете быть более конкретным, почему бы и нет? –

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