小心php单引号与双引号的陷阱

原文地址: http://www.fangyuqiang.com/archives/879

今天碰到一个比较奇怪的问题,想用php的explode函数分割一个用换行符隔开的字符串,但是发现总是不奏效,代码如下:

explode(‘/n’,trim($_POST['datatable']));

 

困惑。最后google了下,原来是自己的编程习惯还有对php不够娴熟闹的。在php中,单引号与双引号都是可以用来指定一个字符串,因为平时都是随便用,从来没有注意到其中详细的差别,今天碰到的问题就是因为单引号与双引号的差别引起的,只要将代码改成

explode(“/n”,trim($_POST['datatable']));,单引号改成双引号就OK。

单引号

指定一个简单字符串的最简单的方法是用单引号(字符 ‘)括起来。

要表示一个单引号,需要用反斜线(/)转义,和很多其它语言一样。如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意如果你试图转义任何其它字符,反斜线本身也会被显示出来!所以通常不需要转义反斜线本身。
————–所以我们用str_replace(‘/n’,’
’)替换的 字符串中的 /n 而不是换行符,似乎有些晕。也就是说单引号内的是字符串,php不做任何解释,这其实在别的地方用的时候都知道,但没想到连换行符都不解释。

双引号

如果用双引号(”)括起字符串,PHP 懂得更多特殊字符的转义序列:
表格 6-1. 转义字符

序列含义
/n 换行(LF 或 ASCII 字符 0×0A(10))
/r 回车(CR 或 ASCII 字符 0×0D(13))
/t 水平制表符(HT 或 ASCII 字符 0×09(9))
// 反斜线
/$ 美元符号
/” 双引号
/[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符
/x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符

此外,如果试图转义任何其它字符,反斜线本身也会被显示出来!

所以,在使用str_replace,explode这些函数的时候,应该要是用双引号!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值