使用 PHP 从文件中解析数据

Parsing data from file with PHP

我在使用 file_get_contents.

解析文件中的数据时遇到了一个奇怪的问题

文件内容:0,0,0(0到255之间有3个随机数,中间用逗号隔开)

$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 编码,我认为解析后的字符串中有一些空白字符,但我不知道该怎么办,因为简单的 trim 不起作用。

谢谢你的想法!

您的文件以字节顺序标记 (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 进行比较,并在必要时将其从字符串中删除。