2010-06-03 48 views
2

我想开发一个PHP类,使我能够将查询字符串添加到url中并根据传递的变量处理它。如何才能做到这一点?如何获取和检查附加到URL中的查询字符串? PHP

www.example.com?var1=a&var2=b&var3=c 

现在我想?var1=a&var2=b&var3=c部分并处理它基于变量。

感谢您的答复

,但我想,我可以得到整个查询字符串,因为我不会是肯定会被发送到URL中的变量名因此$ _ GET方法不会正常工作的一种手段。

由于在 http://php.net/manual/en/reserved.variables.get.php

+1

你说的是与您(从例如数据库)访问字符串中包含您的网站或网址的网址吗? – 2010-06-03 10:58:18

+0

我正在讨论用于访问您的网站的网址。 – 2010-06-03 11:10:55

回答

3

$_SERVER['QUERY_STRING'] 

但是,我不知道如何将比$_GET更有用。你说:

我不会是肯定的变量名的

您可以通过$_GET阵列与foreach循环迭代:

foreach ($_GET as $key => $val) { 
    echo $key . ": " . $val; 
} 

但是......如果你是谈论任意 URL(不一定是被请求的URL),那么上述方法将不起作用,因为它们显然不会在$_GET中。相反,你可以使用parse_url

$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_QUERY); 

输出:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
arg=value 
+0

+1的真棒品种介绍。这应该做OP的要求和更多。我忘记了提到的几个选项。 – Joseph 2010-06-03 13:33:30

+0

非常感谢您的回答。 – 2010-06-07 08:37:30

4
// Current URL: www.example.com?var1=a&var2=b&var3=c 
function handleUrl() 
{ 
    $var1 = $_GET['var1']; // now contains 'a' 
    $var2 = $_GET['var2']; // now contains 'b' 
    $var3 = $_GET['var3']; // now contains 'c' 

    return "Querystring now contains $var1 $var2 and $var3"; 
} 

更多信息,如果您有存储在一个变量的参数,然后用parse_str。例如:

$str = 'var1=a&var2=b&var3=c'; 
parse_str($str); 
echo $var1; 
+0

但不要忘记htmlspecialchars()$ _GET,否则人们可以使用xss来“破解”您的网站或使用它的坏东西:) – ahmet2106 2010-06-03 11:03:26

0

这里的功能是一个简约的类,应该工作,但没有测试。

<?php 
class URLHandler 
{ 
    public $get; 

    public function __construct($get); 
    { 
     $this->get = $get; 
    } 

    public function get_var($var) 
    { 
     return htmlspecialchars($this->get[$var]); 
    } 

    public function check_var($var, $is) 
    { 
     if($this->get_var($var) == $is) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

// Below is how you can use this class 
$URL = new URLHandler($_GET); 
if($URL->check_var('var1', 'a')) 
{ 
    echo 'yes your first var is a'; 
    // Here you can add a function or functions which should be loaded if var1 = a 
} 
else 
{ 
    echo 'No, your first var is not a, its '.$URL->get_var('var2'); 
    // Here you can add a function or functions which should be loaded if var1 is not a 
} 

if($URL->check_var('var2', 'a')) 
{ 
    echo 'and your second var is a'; 
} 
else 
{ 
    echo 'your second var is not a, its '.$URL->get_var('var2'); 
} 
?> 

希望如果你想访问网址参数,就可以使用这个字符串,帮助 艾哈迈德