php输出网页源代码莫名奇妙的多了一堆方框,导致ajax验证失败.

今天在用一个ajax验证用户名的功能,返回值报错,抓包看了下,多出来一堆点,源代码里显示方框和6个空行

这堆东西导致ajax判断返回值会错误,度娘了一下午(皇天不负游戏人啊),原来是一个坑爹的BOM头文件.

解决方法就是 输出前用ob_clean()函数,清除;

切记不要用记事本打开utf8编码的php文件.容易出现这种问题

下面是度娘的解释.

BOM —— Byte Order Mark,中文名译作“字节顺序标记”。在这里找到一段关于 BOM 的说明:

在UCS 编码中有一个叫做 "Zero Width No-Break Space" ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在传输字节流前,先传输字符 "Zero Width No-Break Space"。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (“零宽无间断间隔”)又被称作 BOM。

UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。

字符U+FEFF如果出现在字节流的开头,则用来标识该字节流的字节序,是高位在前还是低位在前。如果它出现在字节流的中间,则表达零宽度非换行空格的意义,用户看起来就是一个空格。从Unicode3.2开始,U+FEFF只能出现在字节流的开头,只能用于标识字节序,就如它的名称——字节序标记——所表示的一样;除此以外的用法已被舍弃。取而代之的是,使用U+2060来表达零宽度无断空白。

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。

PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!

原文地址:https://www.cnblogs.com/jinshuo/p/8474514.html

时间: 2024-08-04 11:55:11

php输出网页源代码莫名奇妙的多了一堆方框,导致ajax验证失败.的相关文章

c#利用WebClient和WebRequest获取网页源代码的比较

前几天举例分析了用asp+xmlhttp获取网页源代码的方法,但c#中一般是可以利用WebClient类和WebRequest类获取网页源代码.下面分别说明这两种方法的实现. WebClient类获取网页源代码 WebClient类 WebClient类位于System.Net命名空间下,WebClient类提供向URI标识的任何本地.Intranet或Internet资源发送数据以及从这些资源接收数据的公共方法. 源代码 ///引用命名空间using System.IO;using Syste

body标点下莫名奇妙多了一行空行,原来是编码的问题

之前为了方便,直接在服务器修改文件,然后点保存,但是问题来了,在顶部莫名奇妙多了一个空行,如图1 图1 原来在源代码编辑的代码如图2 图2 但是在FF或者Chrome外部样式却在body里面,而不是head里头,如图3 图3 再看看谷歌body里面却无端端多了一行空行,如图4 图4 同时,在FF查看源码却发现Head,body无端端变成红色,而其他页面除了第一行<html>标红色外,其他head,body为黑色,如图5 图5 解决方法:把这一页保存为UTF-8格式以上图片均显示正常 思考:出现

android应用开发_网络部分2——采用HttpURLConnection获取获取网页源代码

本文是android应用开发_网络部分1——采用HttpURLConnection获取网络图片的延续练习. 接下来,我们再来一个查看网页源代码的工程来加深了解. 布局上还是一个竖直排列的线性布局,一个edittext用于输入html路径,一个button,用于点击获取,一个textview用于显示. main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:and

安卓开发教程-实战网页源代码查看器,安卓程序员必备

本系列教程致力于可以快速的进行学习安卓开发,按照项目式的方法,通常一篇文章会做一个小程序.提高学习的兴趣. 一方面总结自己所得,另一方面可以通过自己的分享帮助更多学习的同仁. 因为知识的连贯性,推荐按照瞬息进行学习.目录链接:http://www.chengxiaoxiao.com/bozhu/1336.html 本教程由今日头条-做全栈攻城狮原创首发,转载请注明出处. 求兼职:请联系wx:aiquanzhan 页尾提供github源代码下载地址. 一.项目描述: 众所周知,组成网站的每个页面都

抽取网页源代码中的中文字符

通过正则匹配中文字符,写入新的文本,我在这里删除了表示字体的中文 import re f=open(r'C:\Users\lenovo\Desktop\1.txt','r',encoding='utf8') m= re.compile(u"[\u4e00-\u9fa5]+") p=open(r'C:\Users\lenovo\Desktop\2.txt','w',encoding='utf8') for line in f.readlines(): list=re.findall(m,

利用backgroundwork----递归读取网页源代码,并下载href链接中的文件

今天闲着没事,研究了一下在线更新程序版本的问题.也是工作中的需要,开始不知道如何下手,各种百度也没有找到自己想要的,因为我的需求比较简单,所以就自己琢磨了一下.讲讲我的需求吧.自己在IIs上发布了一个网站,这个网站仅仅只是内部使用的,网站的内容就是我的另外一个程序(就叫A程序吧)的打包发布的文件放进去.然后在客户端启动我的A程序之前检查是否有新版本文件发布.如果有,我根据网页源代码的信息和本地文件信息进行比较,决定是否下载.如果有下载,下载完成后执行A程序的.exe文件启动A程序.大致的要求就是

用正则表达式去截取网页里文字的方法。参数为读取的网页源代码

//抓取文字方法,参数为网页源代码 public string ExtractText(string strHtml) { string result = strHtml; result = RemoveComment(result); //调用去掉注释等方法 result = RemoveScript(result); //调用去除js 方法 result = RemoveStyle(result); //调用去除样式表方法 result = RemoveTags(result); //调用去

InternetOpen, InternetOpenUrl, InternetReadFile 获取网页源代码

使用InternetOpen初始化WinINet函数,然后在使用InternetOpenUrl打开指定链接,最后就用InternetReadFile就能读取到网页源代码. 下面的代码能够打开http://www.baidu.com/并且将网页源代码打印出来. #include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,"Wininet.lib")#incl

python解析百度网页源代码:取搜索引擎返回的前page_num*10个链接的url

如题:python解析百度网页源代码:取搜索引擎返回的前page_num*10个链接的url 最近因为做<信息检索>homework,需要在搜索引擎中搜索某个query,人工查找那些搜索引擎返回的链接,判断前30个是否相关,然后评价该搜索引擎的性能.蛋疼的一个个点进去链接,然后看网页搜索的内容是否和想要查询的query相关,从而进行下一步工作.于是想到解析网页,找到搜索引擎返回的链接的url,等做完了作业才做这个,无碍.目前分析了百度的源代码,进行了分析工作.对于其他搜索引擎的任务再分析. #