使用 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 进行比较,并在必要时将其从字符串中删除。
我在使用 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 进行比较,并在必要时将其从字符串中删除。