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

PHP返回JSON前出现多余问号,客户端解析失败求助

问题:PHP返回JSON开头出现多余问号,每次require/include新增一个

你遇到的这个问题很典型——返回的JSON字符串开头藏着多个问号,每用一次包含语句就多一个,浏览器里看不到但文本编辑器能发现,直接导致客户端JSON解析失败。你的环境是IIS搭配PHP 7.1.7,简化代码和返回结果如下:

简化代码示例

lookup.php

<?php include_once 'common/server.php'; echo $srv->QueryTable(qry_ItemList);

server.php

<?php require_once 'constants.php'; require_once 'sql/queryNAV.php'; class JSON_Server { public function QueryTable($SQLTextName) { $qry_result = /*(do SQL-Query)*/; return json_encode($qry_result); } } $srv = new JSON_RESTServer;

请求与返回示例

请求地址:

http://s-mde/itemLookup.php?number=305475

返回结果(开头的问号破坏了JSON结构):

?????[{"Typ":"I","No_":"408835","Description":"Ds Scene it? Twilight","debugCounter":96},{"Typ":"L","No_":"100773","Description":"Axe Deo Roll Diverse 50ml Ro","debugCounter":96},...]

原因分析

这种情况99%是被包含的PHP文件存在多余输出导致的,具体有几种可能:

  1. 文件末尾的?>标记后面跟着空格、换行或者其他空白字符——PHP解析完脚本后会直接输出这些内容;
  2. 文件带有UTF-8 BOM头——这是编辑器保存UTF-8文件时自动添加的三个隐藏字符(EF BB BF),PHP会把它当作普通输出;
  3. 文件开头的<?php之前有空白字符(比如空行、空格)。

每包含一个有问题的文件,就会多一段这样的隐藏输出,反映到结果里就是多一个问号。


解决步骤

1. 移除所有PHP文件末尾的?>标记

PHP根本不需要这个标记来结束脚本,反而容易引入多余输出。直接删掉所有相关文件(包括constants.php、queryNAV.php)末尾的?>,比如修正后的server.php可以改成:

<?php
require_once 'constants.php';
require_once 'sql/queryNAV.php';

class JSON_Server {
    public function QueryTable($SQLTextName) {
        $qry_result = /*(do SQL-Query)*/;
        return json_encode($qry_result);
    }
}

$srv = new JSON_Server;
// 这里不再写?>,彻底避免末尾的空白输出

2. 检查并移除UTF-8 BOM头

用支持显示隐藏字符的编辑器(比如Notepad++、VS Code)打开所有PHP文件:

  • 在Notepad++里,点击「视图」→「显示符号」→「显示所有字符」,查看文件开头是否有(这就是BOM的可视化表现);
  • 如果有,点击「编码」→「转为UTF-8无BOM编码」,然后保存文件。

3. 清理文件开头的空白

确保每个PHP文件的第一行就是<?php,前面没有任何空行、空格或者其他字符。比如有些文件可能不小心在<?php前面加了个空行,这也会输出空白字符。

4. 额外排查(可选)

如果上述步骤都没用,检查IIS的PHP处理程序映射是否正确,确保没有第三方模块在响应中注入多余内容——不过这种情况概率很低,优先排查文件本身的问题。


修改完成后重新请求接口,返回的JSON开头应该就没有多余问号了,客户端也能正常解析了。

内容的提问来源于stack exchange,提问作者Heinzi Tuberkel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:48