PHP:fread和换行符

时间:2018-03-10 19:17:27

标签: php newline fread

如果我制作一个简单的文本文件,如下所示:

first line.
second line.

以下列方式应用fread:

$fh = fopen("test_file_three.txt",'r') or die("Error attempting to 
open file.");
$first_word = fread($fh,5);
$second_word = fread($fh,6);
$third_word = fread($fh,1);
$fourth_word = fread($fh,3);
echo $first_word;
echo "<br />";
echo $second_word;
echo "<br />";
echo $third_word;
echo "<br />";
echo $fourth_word;
echo "<br />";

$ third_word变量的回声正如预期的那样“空白”。 我假设它接收并存储新的行字符。但是,如果我附加以下代码:

if ($third_word === '\n'){
    echo "Third word is newline character.";
}
else {
    echo "Third word is not newline character.";
}

(或者,==而不是===) 那就是假的;测试$ newline_char ='\ n';但是,在这样的if语句中,工作正常。这里发生了什么?是一个存储的换行符?

2 个答案:

答案 0 :(得分:1)

  

我假设它接收并存储新的行字符。

你的假设是正确的。

根据您创建文件的方式,它将是\n(在Unix,OS X上)或\r\n(Windows)。

确保检查编辑的行尾字符。

  

这里发生了什么?

您的if评估为false,因为'\n'表示字面意思是反斜杠和n字符

使用双引号获取换行符:"\n"并且if 评估为true

What is the difference between single-quoted and double-quoted strings in PHP?

我真的建议您使用hexdump函数,这样您就可以准确地知道字符串中存储的内容。

Here's an implementation of a hexdump function.

通过拨打hex_dump而不是echo调整代码:

hex_dump($first_word);
hex_dump($second_word);
hex_dump($third_word);
hex_dump($fourth_word);

给我以下内容:

 0 : 66 69 72 73 74 [first]
 0 : 20 6c 69 6e 65 2e [ line.]
 0 : 0a [.]
 0 : 73 65 63 [sec]

您可以看到$third_word由单个字节0x0a组成,它是换行符(\n)的二进制表示形式。

答案 1 :(得分:0)

PHP Comparison Operators

===运算符会检查类型

$x === $y如果$ x等于$ y,则返回true,且它们的类型相同