收藏
回答

这是啥情况,看到的数据拿不到?



感觉有点凌乱,求大神指导

回答关注问题邀请回答
收藏

7 个回答

  • 淡定
    淡定
    2017-12-05

    是include文件头有BOM字符,删除了就没事了。

    代码本身没问题的。

    2017-12-05
    有用
    回复
  • 淡定
    淡定
    2017-12-05

    BOM: Byte Order Mark 
    UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉弱编辑器(记事本)当前文件采用何种编码,方便编辑器识别。

    PHP在设计之初,没有考虑到BOM头的问题,因此很容易因为BOM头引发诡异的问题,比如编码转换失败,样式错乱等等问题,而且此问题相当隐蔽,很难确定发生问题的文件(试想在没有工具的情况下从上万的工程文件中找到哪个文件带有BOM头)。

     

    BOM头是隐藏字符,非编辑字符,就像普通空文件一样,当我们写<?php的时候其实之前已经加了BOM头,如下(file.php):

    1. {BOM头}<?php 

    2.  

    3. ..... 

    当file.php被其他文件包含时,由于BOM头在php标签外,会当作输出内容输出到浏览器,然后引发问题(如果用gbk察看  会看到三个乱码的字符)。

     

    所以我们在开发过程中,得创建不包含BOM头的UTF8文件,具体见编辑器设置。对于上传文件,用代码截取BOM头即可

    1. if ( substr$data, 0, 3 ) == "\xEF\xBB\xBF" ){ 

    2.  $data=substr_replace( $data'', 0, 3 ) ; 


    2017-12-05
    有用
    回复
  • 韩
    2017-12-05

    data里面的数据是他们后台拼接的。小程序是不会处理的。

    2017-12-05
    有用
    回复
  • 淡定
    淡定
    2017-12-05

    老代码了,莫名其妙出的错误。然后还报错:

    Undefined property: stdClass

    2017-12-05
    有用
    回复
  • 老猴Stormrage
    老猴Stormrage
    2017-12-05

    楼上说法有误。

    你这个肯定是因为你后台拼接的字符串对象格式有误,你应该仔细检查哪里不符合对象规范。

    可以很负责的说,小程序拿到后台拼接的对象格式字符串是会自动转成对象的。

    2017-12-05
    有用
    回复
  • 淡定
    淡定
    2017-12-05

    老代码了,看了下说是后台存在UTF8 bom

    2017-12-05
    有用
    回复
  • 韩
    2017-12-05

    后台返回的字符串要转JSON对象才能取到。

    2017-12-05
    有用
    回复
登录 后发表内容