-
最新文章
- fedora 16 firefox 安装Adobe Flash Player
- fedora 16 grub2 设置默认启动项
- Fedora LiveUSB Creator出现LiveUSB creation failed的原因
- eclipse出现’File Search’ has encounter a problem
- mysql Auto_increment值的修改
- QQ登录OAuth2.0 php接入类
- google根据链接文本生成页面标题
- ecshop快速购买
- jquery each中的this和$(this)
- php出现 Notice: Undefined index: name
- ecmall插件开发可以使用的钩子
- apache和nginx去除index.php
- gocart 自定义url实现原理
- dedecms当前栏目ID调用
- dedecms 文章页面添加本文链接
最新评论
- enterocl on 纯真ip地址查询java代码
- php出现 Notice: Undefined index: name 的解决方法 | 任海波博客 on php出现 Notice: Undefined index: name
- fasdf on ecmall插件开发可以使用的钩子
- 初雪 on dedecms当前栏目ID调用
- xm on ecshop调用dedecms文章列表
- 沙发哥 on 改用windows live writer 来写wordpress
- GUILIN on 欧飞手机充值接口php源代码v0.1
- GUILIN on 欧飞手机充值接口php源代码v0.1
- 穷小子 on wordpress图片水印插件 Watermark RELOADED
- maweb on ecshop调用dedecms文章列表
- xieguozhong on codeigniter $this->db->insert();包含NOW()的问题
- 咖啡机网 on ecshop调用dedecms文章列表
- admin on 欧飞手机充值接口php源代码v0.1
- msirene on 欧飞手机充值接口php源代码v0.1
- gaus on codeigniter 表单验证错误信息添加中文语言
Tag Archives: BOM
PHP5中file_get_contents函数获取带BOM的utf-8文件内容时需注意
PHP5中的file_get_contents函数获取文件内容,实际是按二进制来读取的,所以,当你用file_get_contents去获取一个带BOM的UTF-8文件时,它并不会把UTF-8的BOM去掉,当你把读取的内容当作文本内容来进行一些操作时,可能会发生一些意想不到的结果。这并不能算作一个BUG,因为file_get_contents函数读取文件的时候,是按二进制来读取的,读取到的内容是包含BOM的,而用户操作的时候,想当然的以为读取到的内容是不包含BOM的文本内容(如用记事本打开后看到的内容),因为BOM在编辑软件中是不可见的,只有在十六进制模式下才可以看见,问题也就出在这,实际上是由于“操作不统一”造成的。 当对UTF-8编码的文件进行操作时,如果要把读取的内容当作文本内容来处理,最好先对BOM进行一些处理,这个问题在PHP6中得到了解决(可以设置文本/二进制读取模式),有兴趣的朋友可以自己查找PHP6的手册。 一个较简单的解决方法: 什么是BOM? BOM是Byte Order Mark的缩写,即字节顺序标记,它是插入到UTF-8,UTF-16或UTF-32编码的Unicode文件开头的特殊标记,用来标识Unicode文件的编码类型。 几种编码对应的BOM: EF BB BF UTF-8 FE FF UTF-16 (big-endian) FF FE UTF-16 (little-endian) 00 00 FE FF UTF-32 (big-endian) FF FE 00 00 UTF-32 (little-endian) 对于UTF-8编码的文件而言,BOM标记是可有可无的,Windows自带的记事本文件在保存为UTF-8编码时,会自动加上BOM,现在一些编辑软件,可以在保存为UTF-8编码时可以选择是否带BOM保存。 对于PHP文件,在使用UTF-8编码时,最好都不要BOM保存。因为当你使用include/require/include_once /require_once这些函数去包含一个带BOM的文件时,你得到的网页,在某些兼容性不是很好的浏览器下,你会发现你的网页的实际显示效果跟预期的有细微的差别。