You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:18:19