小程序 -- json返回\ufeff 非法字符

最近在开发小程序的时候,发现从服务器返回的JSON数据有时候能解析,有时候解析不了。

1、前提描述

我们发现,如果直接从服务器端返回JSON字符串,小程序收到的就会是object对象。像这样:


这里直接返回的json字符串。


这里收到的是object。这可能是微信替我们转好了,不多说。

2、问题描述

突然一次,程序跑卡住了,不往下跑了。于是发现返回的data并不是object了,而是一个看似JSON的字符串。



这里的data 看起来就是一个JSON字符串。


然后尝试去 JSON.parse(data),解析失败。委曲求全,eval('(' + data + ')')的方式去解析,发现是可以的。但这不是我想要的。继续找问题。


通过微信开发工具调试模式下Network看到返回的东西前面有两个小红点,鼠标放上去弹出\ufeff,搜索之,非法字符?

3、解决方法

从网上搜了下,如果用windows自带的文本编辑器编辑过文件,就会自动添加上BOM头,很难发现 ,找了一段代码,去掉BOM头。
PS : 服务器我用的php环境
代码链接 www.douban.com/note/332229277/

上传代码至服务器项目目录 , 运行发现原来是微信登录提供的代码带有BOM头。把代码中的 $auto 改为 1 , 就可以删除BOM头了。问题解决。

PHP代码附录


class CheckDom {
  private $auto;
  public function index(){
    header('content-Type: text/html; charset=utf-8');
    if(isset($_GET['dir'])){//设置文件目录,如果没有设置,则自动设置为当前文件所在目录
    $basedir=$_GET['dir'];
    }else{
    $basedir='.';
    }
    $this->auto=0;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/
    echo'当前查找的目录为:'.$basedir.'当前的设置是:';
    echo$this->auto?'检测文件BOM同时去除检测到BOM文件的BOM':'只检测文件BOM不执行去除BOM操作';
    $this->checkdir($basedir);
  }

  function checkdir($basedir){
    if($dh=opendir($basedir)){
    while(($file=readdir($dh)) !==false){
      if($file!='.'&&$file!='..'){
        if(!is_dir($basedir.'/'.$file)){
          echo'文件: '.$basedir.'/'.$file.$this->checkBOM($basedir.'/'.$file).'';
        }else{
          $dirname=$basedir.'/'.$file;
          $this->checkdir($dirname);
        }
      }
    }
    closedir($dh);
    }
  }

  function checkBOM($filename){
    $contents=file_get_contents($filename);
    $charset[1]=substr($contents,0,1);
    $charset[2]=substr($contents,1,1);
    $charset[3]=substr($contents,2,1);
    if(ord($charset[1])==239&& ord($charset[2])==187&&ord($charset[3])==191){
      if($this->auto==1){
        $rest=substr($contents,3);
        $this->rewrite($filename,$rest);
        return(' 找到BOM并已自动去除');
      }else{
        return(' 找到BOM');
      }
    }else{
      return(' 没有找到BOM');
    }
  }

  function rewrite($filename,$data){
    $filenum=fopen($filename,'w');
    flock($filenum,LOCK_EX);
    fwrite($filenum,$data);
    fclose($filenum);
  }

 }

?>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容