Php 更改URL参数分隔符

Php 更改URL参数分隔符,php,url,separator,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;" 但我想分别显示每个参数 您知

首先,我必须说我是一个完全的新手,我几乎没有使用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;
但不幸的是,我可以重新编程传感器,因此我需要将分隔符从“&”更改为“,”

是您要查找的配置指令:

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

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

请注意,设置模式为PHP_INI_PERDIR,这意味着它“可以在PHP.INI、.htaccess、httpd.conf或.user.INI(自PHP5.3起)中设置”()


如果无法更改此设置,可以将查询字符串视为一个整体(请参阅$\u服务器变量),并使用explode或类似的方法在逗号处拆分它。

是您要查找的配置指令:

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

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

请注意,设置模式为PHP_INI_PERDIR,这意味着它“可以在PHP.INI、.htaccess、httpd.conf或.user.INI(自PHP5.3起)中设置”()



如果无法更改此设置,则可以将查询字符串视为一个整体(请参见$\u服务器变量),并将其拆分为逗号,使用explode或类似的方法。

不确定您的确切意思,但您可以使用来帮助您,或者您可以使用将其转换为数组,然后对数据执行所需操作,并使用将其放回字符串中


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

不确定您的确切意思,但您可以使用来帮助您,或者您可以使用将其转换为数组,然后对数据执行所需操作,并使用将其放回字符串中

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;");

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

如果我没有弄错,您必须将该字符串中的所有
name=value
对存储到数据库表中的单独列中

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;");
在这种情况下,您不能使用explode(),因为第一个值包含逗号。

假设您已经创建了名为
mit
liv
livp
b
t
的列,并且您的字符串在进入数据库之前经过了双重检查以避免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');
循环运行时,该
是如何工作的?

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

最后,我用逗号将两个数组(分别)连接在一起,并将它们放入名为
$sql
的查询字符串中


请注意(再次)以这种方式直接从URI的GET参数将数据发送到数据库中是很危险的,之前没有对数据进行验证。

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

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

假设您已经创建了名为
mit
liv
livp
b
t
的列,并且您的字符串在进入数据库之前经过了双重检查以避免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');
循环运行时,该
是如何工作的?

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

最后,我用逗号将两个数组(分别)连接在一起,并将它们放入名为
$sql
的查询字符串中


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

我不确定仅仅更改分隔符是否会有帮助。我假设
add.php
查找变量
$\u GET['I']
,并将该字符串写入数据库。URL中的其他变量可能会被忽略。我认为您需要修改PHP代码来处理URL中的多个变量,或者至少在插入数据库之前将
I
字符串解析为多个值。它只是一个字符串。如果要替换字符串中的字符,请使用
str_replace()
我不确定仅仅更改分隔符是否有帮助。我假设
add.php
查找变量
$\u GET['I']
,并将该字符串写入数据库。URL中的其他变量将为l