获取一个ID和两个&amp ;?的字符串

时间:2012-10-29 17:37:05

标签: php get

我正在运行一个客户端的网站,当一个get字符串传递给它时被访问,我刚收到他们的新链接,我需要从链接中提取5件事。其中一个项目是ID,因此get字符串通常如下所示:

www.website.com/index.php?id=1232352346

以前是如何发送的,但是这个最新的设置如下:

www.website.com/index.php?id=2345134&123461

我想知道的是,如果我像这样拉

$id=htmlspecialchars($_GET["id"], ENT_QUOTES);

它只有第二个和之前的数字吗? (例如:2345134)或者它会有整件事(例如:2345134& 123461)?

5 个答案:

答案 0 :(得分:2)

如果您希望它们分开,您可以尝试这种快速解决方法

array_walk($_GET, function(&$i,$k){empty($i) AND $i=$k;});
var_dump($_GET);

输出

array
  'id' => string '2345134' (length=7)
  123461 => int 123461

如果您想要整个字符串并且id是网址中唯一的密钥,您可以尝试

list($key, $value) = explode("=", $_SERVER['QUERY_STRING']);
var_dump($key,$value);

输出

string 'id' (length=2)
string '2345134&123461' (length=14)

答案 1 :(得分:2)

如果它们不是&的URL编码,那么ID的后半部分将被视为另一个参数 - 无论您如何处理$_GET

有几种方法可以尝试解析它 - 一种简单的方法是检查空参数并假设是另一半的id。您还可以忽略查询字符串的解析方式,并自行解析(可能忽略在两位数内找到的任何&)。

但实际上,最好的办法是确保网址编码正确 - 然后一切都会按预期工作。

以下是您提供的网址的解析方式(使用parse_str(),该网址应与$_GET的填充方式相符):

array(2) {
  ["id"]=>
  string(7) "2345134"
  [123461]=>
  string(0) ""
}

以下是如何解析格式正确的URL:

/index.php?id=1234%265678

array(1) {
  ["id"]=>
  string(9) "1234&5678"
}

如果客户端使用PHP生成URL,则可以使用http_build_query()并自动处理所有编码。

答案 2 :(得分:1)

$url = "www.website.com/index.php?id=2345134&123461";
$parsed = parse_url($url);
parse_str($parsed["query"], $query);
var_dump($query);

请注意,parse_url无法使用无效网址。


这应该有效:

$id = $_GET["id"];
unset($_GET["id");
$keys = array_keys($_GET);
unset($keys);
$other = $_GET[$keys[0]];
var_dump($id, $other);

答案 3 :(得分:1)

$url = "2345134&123461";
$pieces = explode("&", $url);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
 var_dump($pieces );

Codepad

答案 4 :(得分:0)

怎么样.. www.website.com/index.php?id=2345134&123461

//explode it
        $string=$_GET['id'];
        list($first,$second)=explode('&',$string);
//$first = 2345134
//$second = 123461

神圣的bejesus答案很快......