PHP中如何转义带单引号'的字符串?

数据库中用户录入的字符串为Mike's,PHP输出显示在网页中JS会报语法错误,提示Uncaught SyntaxError: Unexpected identifier,明显是多了一个'导致。

页面报错输出代码

<script>
    var html = '<select><option>Mike's</option></select>';
</script>

明显这里的引号和js冲突了,可以用双引号来临时解决,但是有用户也会录入双引号的信息,所以这里有没有什么好的方案可以彻底解决该问题呢?

阅读 8.8k
3 个回答

转义加反斜杠:

'Mike\'s'

也可以用双引号:

"Mike's"

双引号在单引号字符串中不用转义,单引号在双引号字符串中不用转义。

但要注意单双引号有些许不同,比如双引号中可以直接使用变量:

$a='Mike';
"$a's";    //Mike's

还有双引号中可以使用更多的转义字符,比如\n换行符等。

用户输入不用处理,因为PHP内部已经处理过,其中的单引号是字符,不会和作为语言结构的单引号配对的。

$a='Mike\'s';    //字符串值是Mike's,并不是Mike\'s,转义只是为了和语言结构的单引号区别开。用户输入的结果也是这样的。

$b="Mike\"s";    //双引号也是类似的,字符串值是Mike"s而不是Mike\"s

$c="something $b";    //所以再次使用时不需要处理,$b中的双引号并不会和代表字符串的双引号有冲突。

如果你是要放在js代码中,可以使用addslashes函数处理,具体请自行查看文档。

<script>
    var html = '<select><option>Mike\'s</option></select>';
</script>

在php内解决

str_replace("'", "/'", $str);

在js里解决,当然如果用户输入`的话,那也会报错。还是在php处理好

var html = `<select><option>Mike's</option></select>`;
推荐问题