Php 更改URL参数分隔符
首先,我必须说我是一个完全的新手,我几乎没有使用PHP的经验 这是我的问题。我有一个传感器,它以以下形式将数据发送到mysql数据库: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;" 但我想分别显示每个参数 您知
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