单引号,双引号,\n的问题

张映 发表于 2011-09-29

分类目录: php

标签:, , ,

今天遇到比较怪异的问题,单引号无法解释\n,看下面的例子

<?php
$test = file_get_contents('test.txt');
$array = explode('\r\n',$test);
var_dump($array);
?>
结果如下
array(1) { [0]=> string(30) "111111 222222 333333 444444" }

上面的回车根分割行,根本不起作用。

<?php
 $test = file_get_contents('test.txt');
 $array = explode("\r\n",$test);
 var_dump($array);
?
结果如下:
array(4) { [0]=> string(6) "111111" [1]=> string(6) "222222" [2]=> string(6) "333333" [3]=> string(6) "444444" }

换成双引号,\r\n就能解释。

<?php
var_dump("\n");
?>
结果如下:
string(1) " "

\n从表面上看,应当是二个字符才对,但是显示却是一个字符。

<?php
var_dump('\n');
?>
结果如下:
string(2) "\n"

现在是2个字符串。

为什么会这样呢,\n也不是变量啊,单引号不解悉,双引号解悉。感觉很怪异,\n对应的assic表是13,难道就是因为这个把\n当变量了?



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/1334.html

3 条评论

  1. stamhe 留言

    因为单引号不转义字符,保留原始自然字符串。

  2. Deepseath 留言

    这个不算是怪异吧,PHP的单引号和双引号用法是不一样的。
    单引号内的任何字符都会按照字符的原样输出的。
    双引号是会进行解析的。
    类似:
    $variable = 'test';
    echo 'Value : $variable ';
    echo '';
    echo "Value: $variable ";
    会输出:
    Value : $variable Value: test
    -------------------------------------------
    所以基于这个特性,大家都在说单引号的性能要高于双引号(不过,我倒觉得可能影响不大),呵呵,因为单引号是不考虑任何东西的,只是原样输出,而双引号还要进行一下解析。
    ****************
    PS:话说你应该在Chrome浏览器检查一下你的博客留言评论功能这块,呵呵,是看不到验证码文本框后面的问题的,害的俺找了半天,尝试用IE后才发现,呵呵。

  3. Charles 留言

    相信你已经知道了,各种语言里都有转义字符这回事情。PHP中,只有双引号中,才会对字符进行转义。单引号则理解为纯字符串。这样就解决了你的各种疑惑。