Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中读取包含非英语字符的文件时出现问题_Php_Laravel_File_Character Encoding - Fatal编程技术网

在PHP中读取包含非英语字符的文件时出现问题

在PHP中读取包含非英语字符的文件时出现问题,php,laravel,file,character-encoding,Php,Laravel,File,Character Encoding,目前,我面临着读取包含非英语字符的文件的问题。我需要使用以下代码逐行读取该文件: while(!feof($handle)) { $line = fgets($handle); } 这个文件有1711行,但奇怪的是,当我试图遍历该文件时,它显示了1766行 $text = file_get_contents($filePath); $numOfLines = count(explode(PHP_EOL, $text)); 如果有人能帮我解决这个问题,我将不胜感激。您已经标记了“字符编

目前,我面临着读取包含非英语字符的文件的问题。我需要使用以下代码逐行读取该文件:

while(!feof($handle)) {
   $line = fgets($handle);
}
这个文件有1711行,但奇怪的是,当我试图遍历该文件时,它显示了1766行

$text = file_get_contents($filePath);
$numOfLines = count(explode(PHP_EOL, $text));


如果有人能帮我解决这个问题,我将不胜感激。

您已经标记了“字符编码”,因此至少您知道问题的起因。你有一些。。。可能UTF8字符,我打赌其中一些是多字节宽的。您正在通过分解
PHP\u EOL
字符来计算“行”,我猜它是
0x0A
。一些多字节宽的字符将
0x0A
作为其“字符”的单个字节,因此
explode
(作用于字节而非多字节字符)将其视为“行”的结尾
var_dump
您的分解数组,您将很容易看到问题

尝试
计数(mb_分割(“(\r?\n)”,$text))
并查看结果。但我的正则表达式很差,这可能不起作用。我将看到这个问题,以获得有关正则表达式的更多帮助,您需要在新行上拆分:

请记住,您的行尾可能是
\u0085
,但我对此表示怀疑,因为
PHP\u EOL
过于激进

如果
mb_split
有效,请记住,您需要使用PHP的
mb_split
函数进行所有字符串操作。PHP的标准字符串函数采用单字节字符,并提供单独的
mb
函数来处理多字节宽的字符。

1)尝试将该文件缩减为较小的文件。2) 如果你仍然不明白,请在你的问题中分享这个小版本。