我使用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编码,我认为解析后的字符串中有一些空白字符,但我不知道该怎么办,导致简单修剪不起作用。
感谢您的想法!
答案 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进行比较,并在必要时将其从字符串中删除。