PHP字符串含单双引号引发语法错误的解决方法
解决PHP字符串中引号嵌套的语法错误问题
首先,你遇到的Parse error是语法解析阶段的错误,代码还没运行到addslashes()就已经报错了。问题出在第二行的echo语句里:
echo $str . " New "home" away from home when in Bangkok";
你用双引号"包裹了整个字符串,但字符串内部又出现了"home"的双引号——PHP会把第一个"之后的home前面的"当成字符串的结束标记,后面的home就变成了无意义的裸文本,自然触发语法错误。
解决方法有这几种,按需选择:
1. 转义字符串内部的引号
在双引号字符串里的双引号前加上反斜杠\,告诉PHP这是字符串的一部分,不是结束标记:
<?php $str = "Couldn't pay via card"; // 转义内部的双引号 echo $str . " New \"home\" away from home when in Bangkok"; echo addslashes($str) . " This is safe in a database query."; ?>
注:双引号字符串里的单引号不需要转义,所以$str里的Couldn't是正常的。
2. 混合使用单双引号包裹字符串
如果字符串里包含大量双引号,可以改用单引号'包裹整个字符串,这样内部的双引号不需要任何转义:
<?php $str = "Couldn't pay via card"; // 用单引号包裹整个字符串,内部双引号直接使用 echo $str . ' New "home" away from home when in Bangkok'; echo addslashes($str) . " This is safe in a database query."; ?>
反过来,如果字符串里有很多单引号,用双引号包裹也是同理。
关于addslashes()的误区
你可能误解了addslashes()的作用:它是运行时用来给字符串添加转义字符(比如存入数据库时防止SQL注入),但它无法解决语法解析阶段的引号错误。只有先把字符串的语法写对,代码能正常运行了,addslashes()才能发挥作用。另外,现在更推荐用预处理语句来处理数据库操作,比addslashes()更安全可靠。
内容的提问来源于stack exchange,提问作者Paras Prajapati
相关产品推荐
相关产品推荐

