PHP substr函数返回异常:字符串长度为4却仅显示'B',求原因
问题描述
我正在解析文本文件并将内容存入数据库,通过substr函数截取每行前4个字符来判断该行是否需要忽略或处理。测试代码如下:
$inputLine = 'Baseline 100%T,,...,,208a,,208b,,Leerfilter,'; $check = substr($inputLine, 0, 4); var_dump($check);
但var_dump的输出为:
string(4) "B"
我预期输出应为"Base",但实际显示字符串长度为4却仅显示'B'。该输入来自常规文本文件,同格式的数百个文件此前均能正常解析,请问该异常是什么原因?
问题原因与解决办法
这是因为该文本文件带有**UTF-8 BOM(字节顺序标记)**导致的。UTF-8 BOM是文件开头的3个不可见字节(EF BB BF),它们不属于文本内容,但会被PHP当作字符串的一部分读取。当你用substr截取前4个字符时,前3个是BOM字节,第4个才是可见的'B',所以var_dump显示长度为4,但实际只有最后一个字符是可见的。
解决办法:
- 读取文件时先去除BOM:处理每行内容前,使用
ltrim($inputLine, "\xEF\xBB\xBF")去掉开头的BOM字节,再执行截取操作。 - 修复异常文件:用文本编辑器打开该文件,选择“UTF-8无BOM”编码重新保存,后续解析就不会出现该问题。
内容的提问来源于stack exchange,提问作者dlg_
相关产品推荐
相关产品推荐

