今天在项目中发现,客户端在使用ajax得到返回值时,无法匹配字符串。总是报错,打开页面接口发现,页面的头部出现了的字符(BOM头),找到问题了,那么直接用代码清除掉即可。

php隐形字符&#65279解释如下:

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。

何谓BOM?

  •   "EF BB BF" 这三个字节就叫BOM,全称是"Byte Order Mard"。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。

  •   utf-8文件在php中输出的时候bom是会被输出的,所以要在php中使用utf-8,必须要是使用不带bom头的utf-8文件。

  •   常用的文本编辑软件对utf-8文件保存的支持方式并不一样,使用的时候要特别留意。

解决的方法:

1、接notopad++ 保存为无dom格式(格式->转为UTF-8 无dom格式),适合文件少的情况。

2、文件比较多,又想偷懒下,使用下列方法来实现(亲测可用)。将一下代码保存为a.php文件放到根目录下,执行一下,即可自动完成转换。

代码如下:

  1. <?php
  2. // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)
  3. $HOME = dirname(__FILE__);
  4. // 如果是Windows系统,修改为:$WIN = 1;
  5. $WIN = 0;
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml">
  9. <head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  11. <title>UTF8 BOM 清除器</title>
  12. <style>
  13. body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
  14. .FOUND { color: #F30; font-size: 14px; font-weight: bold; }
  15. </style>
  16. </head>
  17. <body>
  18. <?php
  19. $BOMBED = array();
  20. RecursiveFolder($HOME);
  21. echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
  22. foreach ($BOMBED as $utf) { echo $utf ."<br />\n"; }
  23. echo '</p>';
  24. // 递归扫描
  25. function RecursiveFolder($sHOME) {
  26. global $BOMBED, $WIN;
  27. $win32 = ($WIN == 1) ? "\\" : "/";
  28. $folder = dir($sHOME);
  29. $foundfolders = array();
  30. while ($file = $folder->read()) {
  31. if($file != "." and $file != "..") {
  32. if(filetype($sHOME . $win32 . $file) == "dir"){
  33. $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
  34. } else {
  35. $content = file_get_contents($sHOME . $win32 . $file);
  36. $BOM = SearchBOM($content);
  37. if ($BOM) {
  38. $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
  39. // 移出BOM信息
  40. $content = substr($content,3);
  41. // 写回到原始文件
  42. file_put_contents($sHOME . $win32 . $file, $content);
  43. }
  44. }
  45. }
  46. }
  47. $folder->close();
  48. if(count($foundfolders) > 0) {
  49. foreach ($foundfolders as $folder) {
  50. RecursiveFolder($folder, $win32);
  51. }
  52. }
  53. }
  54. // 搜索当前文件是否有BOM
  55. function SearchBOM($string) {
  56. if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
  57. return false;
  58. }
  59. ?>
  60. </body>
  61. </html>
如果您对上面的内容还有补充,请在文章下评论或者给我[留言]。谢谢!

phpBOM头(字符&#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客的更多相关文章

  1. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

  2. oracle 索引失效原因及解决方法

    oracle 索引失效原因及解决方法 2010年11月26日 星期五 17:10 一.以下的方法会引起索引失效 ‍1,<>2,单独的>,<,(有时会用到,有时不会)3,like ...

  3. DedeTag Engine Create File False提示的种种原因及解决方法

    DedeTag Engine Create File False提示的种种原因及解决方法 第一种情况:站点.文件夹权限不足造成无法建立文件 这种情况的出现,一方面可能是Apache设置的读写权限较严格 ...

  4. axios发送两次请求原因及解决方法

    axios发送两次请求原因及解决方法 最近Vue项目中使用axios组件,在页面交互中发现axios会发送两次请求,一种请求方式为OPTIONS,另外一种为自己设置的. 如图: 什么是CORS通信? ...

  5. .NET 3.5 安装错误的四个原因及解决方法

    .net framework 3.5 安装错误的四个常见原因及解决方法,飓风软件站整理,转载请注明. 1.清除所有版本 .NET Framework  安装错误后在系统中遗留的文件: 如果您以往安装过 ...

  6. Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  7. Nginx 502 Bad Gateway 错误的原因及解决方法

    http://my.oschina.net/zhouyuan/blog/118708 刚才在调试程序的时候,居然服务器502错误,昨天晚上也发生了,好像我没有做非常规的操作. 然后网上寻找了下答案, ...

  8. Nginx 499错误的原因及解决方法

    今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */n ...

  9. Java并发编程:Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

随机推荐

  1. 主机入侵防御系统(HIPS)分析

    主机入侵防御系统(Host Intrusion Prevent System,HIPS)是近几年出现并迅速发展的新兴产物,与传统意义的防火墙和杀毒软件不同,它并不具备特征码扫描和主动杀毒等功能,所以想 ...

  2. Spring MVC(四)--控制器接受pojo参数

    以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...

  3. 08_jQuery对象初识(四)each循环、data(非常重要)

    each: 不使用for循环答应jQuery对象,使用each: 退出整个each循环: 退出一次each循环: data:

  4. vue 全局方法(单个和多个方法)

    参考: https://www.cnblogs.com/zhcBlog/p/9892883.html          https://blog.csdn.net/xuerwang/article/d ...

  5. 史上最贵域名诞生!360斥资1700万美元买360.com

    昨日,360公司官方人士向腾讯科技确认,公司已斥巨资收购国际顶级域名360.com.传闻这一收购价格为1700万美元,约合人民币1.1亿元. 史上最贵域名诞生!360斥资1700万美元买360.com ...

  6. 网络爬虫技术Jsoup

    Jsoup介绍:Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址.HTML文本内容 Jsoup主要有以下功能: 1. 从一个URL,文件或字符串中解析HTML 2. 使用D ...

  7. Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

    Java项目引入 Freemarker 插件自行完成. 步骤如下: .编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username}: ...

  8. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  9. 2、node服务器

    一.简单的node服务器搭建 1.首先新建一个名为server.js的文件(文件名随意,后缀名必须是.js) 2.粘贴进文件以下内容 //引入http模块 const http = require(& ...

  10. JavaSE_03_Thread类02

    1.1 线程状态概述 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中, 有几种状态呢?在API中 java.lang.Thread.State 这个 ...