使用PHP解析文件中的数据

时间:2015-03-28 14:39:03

标签: php utf-8 text-parsing

我使用file_get_contents从文件解析数据时遇到了一个奇怪的问题。

文件内容:0,0,0(有3个随机数,范围从0到255,以逗号分隔)

$s = file_get_contents($this->filePath);
var_dump(trim($s));
$rgb = explode(',', trim($s));
var_dump($rgb);

输出:

string(8) "0,0,0"
array(3) {
  [0]=>
  string(4) "0"
  [1]=>
  string(1) "0"
  [2]=>
  string(1) "0"
}

如果我尝试转换为整数:

string(14) "255,128,255"
array(3) {
  [0]=>
  string(6) "255"
  [1]=>
  string(3) "128"
  [2]=>
  string(3) "255"
}

echo((int)$rgb[0]); // -> 0
echo((int)$rgb[1]); // -> 128
echo((int)$rgb[2]); // -> 255

该文件采用UTF-8编码,我认为解析后的字符串中有一些空白字符,但我不知道该怎么办,导致简单修剪不起作用。

感谢您的想法!

1 个答案:

答案 0 :(得分:1)

您的文件以字节顺序标记(BOM)开头。你的两个字符串的长度是赠品,因为它们都是3个字节太长。

理想情况下,您应该尝试在源头删除此问题,方法是在开始时保存没有BOM的文件。但是,如果这不是一个选项,您可以从字符串中手动删除它:

$str = file_get_contents($this->filePath);
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (strncmp($str, $bom, 3) === 0) {
    $str = substr($str, 3);
}

我使用了从this blog post获取的一些代码的略微修改版本。基本上,它将字符串的前3个字节与BOM进行比较,并在必要时将其从字符串中删除。