今天遇到比较怪异的问题,单引号无法解释\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
因为单引号不转义字符,保留原始自然字符串。
这个不算是怪异吧,PHP的单引号和双引号用法是不一样的。
单引号内的任何字符都会按照字符的原样输出的。
双引号是会进行解析的。
类似:
$variable = 'test';
echo 'Value : $variable ';
echo '';
echo "Value: $variable ";
会输出:
Value : $variable Value: test
-------------------------------------------
所以基于这个特性,大家都在说单引号的性能要高于双引号(不过,我倒觉得可能影响不大),呵呵,因为单引号是不考虑任何东西的,只是原样输出,而双引号还要进行一下解析。
****************
PS:话说你应该在Chrome浏览器检查一下你的博客留言评论功能这块,呵呵,是看不到验证码文本框后面的问题的,害的俺找了半天,尝试用IE后才发现,呵呵。
相信你已经知道了,各种语言里都有转义字符这回事情。PHP中,只有双引号中,才会对字符进行转义。单引号则理解为纯字符串。这样就解决了你的各种疑惑。