0

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

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

以前是这样发送的,但是这个最新的设置是这样的:

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

我想知道的是如果我像这样拉那个ID

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

它会只有第二个&之前的数字(例如:2345134)还是会有整个数字(例如:2345134&123461)?

4

5 回答 5

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是 URL 中的唯一键,您可以尝试

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

输出

string 'id' (length=2)
string '2345134&123461' (length=14)
于 2012-10-29T17:42:00.987 回答
2

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

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

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

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

数组(2){
  [“身份证”]=>
  字符串(7)“2345134”
  [123461]=>
  字符串(0)“”
}

下面是这个格式正确的 URL 的解析方式:

/index.php?id=1234%265678

数组(1){
  [“身份证”]=>
  字符串(9)“1234&5678”
}

如果客户端使用 PHP 生成 URL,那么它们可以使用http_build_query()并且所有编码都会自动处理。

于 2012-10-29T17:45:37.890 回答
1
$url = "www.website.com/index.php?id=2345134&123461";
$parsed = parse_url($url);
parse_str($parsed["query"], $query);
var_dump($query);

请记住,parse_url无效 URL 会失败。


这应该有效:

$id = $_GET["id"];
unset($_GET["id");
$keys = array_keys($_GET);
unset($keys);
$other = $_GET[$keys[0]];
var_dump($id, $other);
于 2012-10-29T17:38:48.843 回答
1

尝试

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

键盘

于 2012-10-29T17:40:06.797 回答
0

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

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

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

于 2012-10-29T17:47:21.247 回答