首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: fread和换行符

PHP: fread和换行符
EN

Stack Overflow用户
提问于 2018-03-10 19:17:26
回答 2查看 647关注 0票数 1

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

代码语言:javascript
复制
first line.
second line.

并以下列方式应用fread:

代码语言:javascript
复制
$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变量的回声只是“空白”。我认为它接收并存储了新的行字符。但是,如果我附加以下代码:

代码语言:javascript
复制
if ($third_word === '\n'){
    echo "Third word is newline character.";
}
else {
    echo "Third word is not newline character.";
}

(或者是==而不是===),结果显示为false;测试$newline_char = '\n';但是,在这样的if语句中,效果很好。这里发生了什么?,是否正在存储换行符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-10 19:48:16

我认为它接收并存储了新的行字符。

你的假设是正确的。

取决于您如何创建该文件,它将是\n (在Unix上,OS上)或\r\n (Windows)。

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

这里发生了什么事?

您的if值为false,因为'\n'的意思是字面上是一个反斜杠和一个字符

使用双引号获取换行符:"\n"和您的if应该计算为true

在PHP中,单引号字符串和双引号字符串有什么区别?

我建议您使用十六进制函数,这样您就可以确切地知道字符串中存储了什么。

这里是一个十六进制函数的实现。

通过调用hex_dump而不是echo来调整代码

代码语言:javascript
复制
hex_dump($first_word);
hex_dump($second_word);
hex_dump($third_word);
hex_dump($fourth_word);

给我以下内容:

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2018-03-10 19:20:56

PHP比较运算符

===运算符检查类型

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49213054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档