> 백엔드 개발 > PHP 튜토리얼 > 전송 중에 문자열이 변경되었습니다.

전송 중에 문자열이 변경되었습니다.

WBOY
풀어 주다: 2016-07-29 09:12:11
원래의
1119명이 탐색했습니다.

情况描述:

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

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

这是为什么呢?

  这是怎么回事呢?

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

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

<code><span>  UPDATE<span><span>`bitstorm_http_node`<span>.<span>`config_user_pwd`<span><span>SET<span><span>`Password`<span>=<span>';?9W/U\\|"s6u|:M'<span><span>WHERE<span><span>`Id`<span>=<span>14<span>;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
로그인 후 복사

  我们发现程序在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()函数来手动转义即可

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

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

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

以上就介绍了字符串在传递过程中发生了变化,包括了插入数据方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿