在PHP中处理字符串时出现意外结果

时间:2012-02-13 22:44:33

标签: php string file-upload file-processing

感谢您抽出时间为我看一下。

背景:我正在为个人理财项目处理OFX / QFX文件。我用C#编写了代码并且执行得很完美。我能够创建我的导入对象,逐行处理OFX / QFX文件,并将前面提到的对象输出到控制台。但是,我将其移植到PHP,以便在未在.Net Framework上编写的Web应用程序中使用。

问题:用户上传文件并传递给我的PHP文件。使用$line = fgets($file);逐行读取文件时,我没有得到预期的结果。我知道文件是打开的并且正在读取该行。然而;当我收到变量后立即放var_dump($line) "string(15) "ENG ""当我得到的是:

<LANGUAGE>ENG

我的处理模型在很大程度上取决于读取字符串标记部分的能力,但由于PHP似乎正在剥离它,我的代码没有按预期执行。

问题:任何人都可以告诉我为什么在使用fgets()时我没有收到完整的字符串值?还有更正确的方法吗?我对.Net非常了解,但PHP对我来说有点新鲜,所以我假设它只是我不理解的PHP语言的一个怪癖。

谢谢

3 个答案:

答案 0 :(得分:3)

问题在于<LANGUAGE>被浏览器解析,被视为无效的HTML标记并被忽略。

在浏览器中右键单击查看源以查看实际输出。

答案 1 :(得分:0)

正如您在var_dump()结果中看到的那样,它是一个15字符长的字符串。您的问题可能是<LANGUAGE>标记未显示,但“有”。

请尝试使用htmlspecialchars($line);。但我通常建议使用var_dump(),因为它非常清楚地显示了变量值的类型和长度。

答案 2 :(得分:0)

我冒昧地猜测,<LANGUAGE>ENG是否是你期望输出到屏幕上然后它可能是。您的Web浏览器将看到并尝试将其解析为标记,并仅显示与该标记关联的数据,而不显示标记本身。不是PHP的问题。尝试使用预标签回显该行

echo '<pre>' . $line . '</pre>';