fget有时候不会在PHP中读完整行'<'符号影响fgets线读

时间:2015-08-07 11:02:17

标签: php fgets

PHP fgets函数未完全读取以下文本文件行。我使用fgets逐行读取某些数据。

无法完全读取的行如下;

%107A195U<u--8+5-9+6-17+3-5v<1

truncates to:  %107A195U

%113A120+<l56+2l5-6+<17+2-+6-+2

truncates to: %113A120+

它只会读取部分行,但只要遇到&#34;&lt;&#34;小于标志,它截断该行。其他类似的行看起来很好,但有些与&lt;它们中的字符被截断。但是,如果我把一个单一的&#39;在小于符号之后引用,然后该行全部读取。例如&lt;&#39;导致整行正确读取。很奇怪。它有点像有效影响fgets行读取,取决于旁边的其他字符。

例如,其他读得完全正常的行如下所示;

%106A191+->2-15l8v<><10-4+u

%108A189+l-E-hj2l6+3l-14+2->-6l4+l2

%109A188vh->Xfp-+8l-3+5-l3l+11-l>7

%110A186+wo2v+o4-2++qd5+5-+<3+<+3-+1

计划代码

<?php
echo "START " ."<br>";
$FileName = "./test5.txt";
$infile = fopen($FileName, "r") or die("Unable to open file!");
$dataline = fgets($infile);
while(!feof($infile)) {
  $dataline = fgets($infile);  
  echo " DATALINE ==> " . $dataline . "<br>"; //debug 
}//endloop
?>

节目数据文件 - text5.txt

TEST DATA FILE
%106A191+->2-15l8v<><10-4+u 
%107A195U<u--8+5-9+6-17+3-5v<1
%108A189+l-E-hj2l6+3l-14+2->-6l4+l2
%109A188vh->Xfp-+8l-3+5-l3l+11-l>7
%110A186+wo2v+o4-2++qd5+5-+<3+<+3-+1
%111A186qGBl4l<+<3+3l-5+u15u6
%112A182+u>2-4-2+2-16+2u+-2+-3->2
%113A120+<l56+2l5-6+<17+2-+6-+2
%114A120l>2-50+->u2g+<18+-6+<69+
END DATA

计划输出

START 
DATALINE ==> %106A191+->2-15l8v<><10-4+u 
DATALINE ==> %107A195U DATALINE ==> %108A189+l-E-hj2l6+3l-14+2->-6l4+l2 
DATALINE ==> %109A188vh->Xfp-+8l-3+5-l3l+11-l>7 
DATALINE ==> %110A186+wo2v+o4-2++qd5+5-+<3+<+3-+1 
DATALINE ==> %111A186qGBl4l<+<3+3l-5+u15u6 
DATALINE ==> %112A182+u>2-4-2+2-16+2u+-2+-3->2 
DATALINE ==> %113A120+ DATALINE ==> %114A120l>2-50+->u2g+<18+-6+<69+ 
DATALINE ==> END DATA

寻求解释和解决方案。

1 个答案:

答案 0 :(得分:1)

有人认为 htmlentities()功能解决了这个问题。非常感谢您的回复。非常感激。

解决方案:

echo " DATALINE ==> " . htmlentities($dataline) . "<br>";