更改URL参数分隔符

时间:2016-07-18 20:59:50

标签: php url separator

首先,我必须说我是一个全新手,我真的有使用PHP的经验。

这是我的问题。我有一个传感器,它以下列形式将数据发送到mysql数据库:

http://192.168.1.2/add.php?i=mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;

现在我可以在我的mysql表中显示它:

"mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;"

但我想分别显示每个参数。

您知道如何更改"&"到","?

理想的解决方案是将url命令更改为此表单:

http://192.168.1.2/add.php?i=mit=0106&22:5113/07/2016&liv=175cm&livp=000%&b=12.0V&t=36;

但不幸的是我可以重新编程传感器,所以我需要更改"&"到","。

4 个答案:

答案 0 :(得分:3)

arg_separator.input是您正在寻找的配置指令:

  

arg_separator.input string
  PHP用于将输入URL解析为变量的分隔符列表。

     

注意:
  该指令中的每个字符都被视为分隔符!

请注意设置模式是PHP_INI_PERDIR,这意味着它可以在php.ini,.htaccess,httpd.conf或.user.ini中设置(自PHP 5.3起)" (http://php.net/manual/en/configuration.changes.modes.php

如果您无法更改此设置,您可能会查看整个查询字符串(请参阅$ _SERVER变量),并使用explode或类似内容将其拆分为逗号。

答案 1 :(得分:1)

如果我做对了,你必须将该字符串中的所有name=value对存储到数据库表中的不同列中。

在这种情况下,您不能使用explode(),因为第一个值包含逗号。

假设您已经使用所需的数据类型创建了名为mitlivlivpbt的列,并且您的字符串是在进入数据库之前进行双重检查以避免SQL注入,您可以执行以下操作:

# your input string
$input = "mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;";

# loop through it and determine all name=value pairs
while (strlen($input)>2) {
    preg_match ('/([a-z]+)\=(.*?)(?:,[a-z]+=|;)/', $input, $m);
    # store names here
    $d1[] = "'{$m[1]}'";
    # and values here
    $d2[] = "'{$m[2]}'";
    $input = substr($input, strlen($m[1]) + strlen($m[2]) + 2);
}

# join arrays into string
$d1 = join(",", $d1);
$d2 = join(",", $d2);

# and put them into query
$sql = "INSERT INTO mytable ($d1) VALUES ($d2);";

echo $sql;

这将打印出这样的查询

INSERT INTO mytable ('mit','liv','livp','b','t')
VALUES ('0106,22:5113/07/2016','175cm','000%','12.0V','36');

while循环如何运作?

它使用$input作为参数,查找name=value后跟另一个name=(对于内对)或;(对于最后一对)来确定其结束。然后将名称提取到单独的数组d1中,将提取到另一个名为d2的数组中。从字符串的开头删除第一个匹配项,并在循环中再转一圈,直到$input字符串为空。当然,这两个数组中的元素都存储在单引号中,以便以后在查询中使用。

最后,我将两个数组(单独)与元素之间的逗号连接起来,并将它们放入名为$sql的查询字符串中。

请注意(再次)以这种方式将数据直接从URI的GET参数发送到数据库而没有事先验证数据是危险的。

答案 2 :(得分:0)

不确定您的意思,但您可以使用str_replace()来帮助您,或者您可以使用explode()将其转换为数组,然后执行您需要处理的数据并将其放回原处使用implode()将字符串转换为字符串。

编辑:谢谢,修复了混音。

答案 3 :(得分:-3)

echo "http://192.168.1.2/add.php?i=" . str_replace(",","&","mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;");