1. 云栖社区>
  2. PHP教程>
  3. 正文

字符串在传递过程中发生了变化

作者:用户 来源:互联网 时间:2017-12-01 11:29:07

字符串过程变化

字符串在传递过程中发生了变化 - 摘要: 本文讲的是字符串在传递过程中发生了变化, 情况描述:   前端输入的内容是:;?9W/U/|"s6u|:M   然而传递到后端再保存到数据库时就成了:;?9W/U|"s6u|:M 这是为什么呢。   这是怎么回事呢。   1:我发现在insert到数据库之前都还是正确的   2:

情况描述:

  前端输入的内容是:;?9W/U/|"s6u|:M

  然而传递到后端再保存到数据库时就成了:;?9W/U|"s6u|:M

这是为什么呢。

  这是怎么回事呢。

  1:我发现在insert到数据库之前都还是正确的

  2:然后单独使用heidisql工具去更改这个值,它显示的sql语句是:

  UPDATE `bitstorm_http_node`.`config_user_pwd` SET `Password`=';?9W/U//|"s6u|:M' WHERE  `Id`=14;

  我们发现程序在insert操作之前,它在值中添加了转义付去转义特殊符号'/'

   可以究竟为什么会转义。难道是字符串的单引号双引号在作祟吗。

  如果把字符放在单引号'之间,除了单引号本身'之外的绝大多数字符会解释成和写在代码中一样的形式。

  放在双引号之间的字符串支持插入替换(内嵌在字符串中的变量会被替换成其内容),而且也会替换转义字符,例如用换行符替换/n,用tab替换/t,/换成//。同样,/|它会解释成|

 

  如果把上面的PHP中的代码的sql置于单引号中,则会是无效的sql语句:

  Invalid query

  INSERT INTO `bitstorm_http_node`.`config_user_pwd` (`Id`, `Domain_Name`, `Username`, `Password`) VALUES (0, "mdc-mon-tg-zabvip01.ubisoft.onbe", "cheng.wang", ";?9W/U/|"s6u|:M");

解决办法:

  在PHP中:并不是每一段被转义的数据都要插入数据库的,如果所有进入 PHP 的数据都被转义的话,那么会对程序的执行效率产生一定的影响,会产生性能问题。

  在运行时调用转义函数(如 addslashes())更有效率。

  所以很明显,这里插入数据库我们需要转义,所以在需要转义的地方调用addslashes()函数来手动转义即可

       $pwd = addslashes($pwd);//加这行代码后保存到数据库就对了,OK,解决问题        if($zabbixHelper==false){            return $this->returnError("Invalid input: Can not login zabbix using this username and password.");        }        $sql = "INSERT INTO `bitstorm_http_node`.`config_user_pwd` (`Id`, `Domain_Name`, `Username`, `Password`) VALUES (0, '" . $domainName . "', '" . $username . "', '" . $pwd . "');";        $this->callSqlQuery($sql));

 

  最后,在PHP中,有时候json编码后也需要转义:

      $parameters = addslashes(json_encode($args));

 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串 , 过程 变化 ,以便于您获取更多的相关知识。