写代码时弹出 parse error,或者打开某个文件时提示解析失败。这个提示太宽泛,得先分清是哪个场景,才能判断问题在哪。它的字面意思就是「解析错误」,即程序在按规则读取内容时,遇到了不符合预期的字符或结构。

场景一:PHP 里的 parse error

PHP 的经典提示长这样:

Parse error: syntax error, unexpected '}' in /www/index.php on line 42

意思是第 42 行的花括号多了或者少了。注意 PHP 报的行号有时是滞后的,真正出错的位置常常在上一行,因为解析器要读到下一个符号才确定语法不对。

最常见的三种原因:漏写分号,字符串引号没配对,函数后面忘了逗号或者多写了逗号。碰上这个报错,从报错行往回看五行基本都能找到。

场景二:JSON 解析失败

「parse error: Unexpected token」一般出现在 JSON.parse 里。可能的原因有:

  • 末尾多了个逗号,标准 JSON 不允许尾逗号
  • 用了单引号而不是双引号
  • 接口返回的不是 JSON,而是 HTML 错误页,需要先打印原始文本
  • 中文被转义错误,或者有 BOM 头

接口场景下最常见的是最后一种,先看响应的 Content-Type 和开头几个字符,比盯着报错信息更快。

场景三:解析 XML 或配置文件

XML 的报错通常直接告诉你行号和列号,比如 mismatched tag,就是标签没有正确闭合。Nginx、Apache 配置解析失败时会提示 unexpected end of file,多半是少了分号或大括号。

这类问题的通用排查动作是:先把文件格式化一遍,缩进对了,缺闭合一眼就能看出。

场景四:Excel 或其他文件打不开

「文件解析错误」还常见于导入数据。比如用程序读取 xlsx 却拿到 xls,或者 CSV 编码不是 UTF-8 导致中文乱码进而解析失败。解决办法是统一编码,并在读取前先探测文件头字节,判断真实格式。

怎么快速定位

通用思路就三步:先确认解析的对象是什么(源码、JSON、XML、二进制文件),再把出错位置附近的原始内容打印出来看,最后用在线格式化工具或者编辑器语法检查辅助定位。

还有一点值得记住:报错信息里的行号是「解析器读到哪里发现不对」,不一定等于错误发生的位置,往回多看几行往往更有效。