今天碰到一个比较奇怪的问题,想用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这些函数的时候,应该要是用双引号!