2010-08-18 44 views
1
一个新的变量

可能重复:
How to grab URL parameters using PHP?如何从URL中提取参数和每个存储在使用PHP

我想知道我怎么可以在每个存储每个URL参数在那里当我不知道url参数有多深时,拥有新的变量?

这里是一个URL值的例子。

http://www.localhost.com/topics/index.php?cat=3&sub1=sub-1&sub2=sub-2&sub3=sub-3&sub4=sub-4

这是我的PHP脚本。

$url = $_SERVER['QUERY_STRING']; 
$query = array(); 

if(!empty($url)){ 
    foreach(explode('&', $url) as $part){ 
    list($key, $value) = explode('=', $part, 2); 
    $query[$key] = $value; 
    } 
} 
+0

@ircmaxell没有它没有。 – synonyms 2010-08-18 02:30:54

+0

@ircmaxell它不是一个笨蛋。 – rook 2010-08-18 02:35:35

回答

1

PHP有这个功能已经内置

$query = parse_str($url); 
extract($query) 

// example 
if(isset($sub1)) { 
    echo $sub1; 
} 

看到parse_str以获取更多信息

+3

否则称为'$ _GET' ... – ircmaxell 2010-08-18 02:33:19

2
extract($_GET); 

它很少是个好主意,虽然这样做,因为如果你不是很小心初始化你的“真正的”变量它可能导致安全问题。它基本上是register_globals所做的以及为什么它被弃用。

+0

...假设我没有误解这个问题,这不是很清楚...... – deceze 2010-08-18 02:40:32

0

它已经被解析的环境:

尝试:

foreach($_GET as $key => $value) 
{ 
    print "$key => $value\n"; 
} 

注:$ value部分已经被解码与urldecode()。所以你实际得到了通过的价值。注2:如果多个值已发布为同一个键,则$ value是从URL中提取的所有值的数组。

http://Plop.com?p=1&p=2&p=3&p=fred

然后$值将是(1,2,3,'弗瑞德);

0

deceze有一个很好的观点,但提取物并不像声音那样糟糕。这些问题在不明白它的作用的情况下使用它。您应该为提取变量添加前缀以防止发生冲突。

<?php 
    extract($_GET,EXTR_PREFIX_ALL,"extrprfx_"); 
?> 

编辑 我刚刚意识到,如果你要传递一个前缀,你应该提供EXTR_PREFIX_ALL作为第二个参数。如果您不想提供前缀但不想覆盖当前变量,请使用EXTR_SKIP。