php UTF8 文件的签名问题


Posted in PHP onOctober 30, 2009

也就是 有BOM 格式编码,或者 无BOM格式编码。
如果看文件的内容,是看不出任何差别的,以下列文件(schema.sqlite.sql)内容为例:
schema.sqlite.sql

CREATE TABLE guestbook ( 
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
email VARCHAR(32) NOT NULL DEFAULT 'noemail@test.com', 
comment TEXT NULL, 
created DATETIME NOT NULL 
); 
CREATE INDEX "id" ON "guestbook" ("id");

如果不带签名,则文件的大小为232字节,如果带签名,则文件大小为235字节。
UTF8签名有3个字节(内容为:EFBBBF),是专门用来告诉软件:该文件是UTF8编码的。
在一般情况下,有无签名不会带来问题,因为编辑器或者其他软件可以按照文本的内容来推断出是否是UTF8。
但有些时候还是会导致问题,比如上诉文件。该文件是sql语句文件,程序恰好要通过以下语句(php)来执行该sql:
$schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql'); 
$dbAdapter->getConnection()->exec($schemaSql);

在这种情况下,带有签名的文件就会导致问题了,因为“UTF8签名用的三个字节”其实是位于文件的最前面。所以导致了上面的语句无法成功运行。
解决的办法也很简单,去掉该文件UTF8签名即可。
当然,上面文件的内容其实都是单字节的,是没有必要保存为UTF8编码的。

补充:全部是单字节内容的文件除非加了UTF8签名,不然再次打开文件时,还是系统的默认编码而已。

PHP 相关文章推荐
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
php处理带有中文URL的方法
Jul 11 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 #PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 #PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 #PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 #PHP
php实现jQuery扩展函数
Oct 30 #PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 #PHP
PHP 批量删除数据的方法分析
Oct 30 #PHP
You might like
php更新修改excel中的内容实例代码
2014/02/26 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php实现头像上传预览功能
2017/04/27 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
jQuery入门知识简介
2010/03/04 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
Python延时操作实现方法示例
2018/08/14 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
python删除某个目录文件夹的方法
2020/05/26 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
Servlet方面面试题
2016/09/28 面试题
新闻学毕业生自荐信
2013/11/15 职场文书
电子商务自荐书范文
2014/01/04 职场文书
优秀员工评语
2014/02/10 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
超市开店计划书
2014/04/26 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
大学生团员个人总结
2015/02/14 职场文书
礼仪培训心得体会
2016/01/22 职场文书
三下乡活动心得体会
2016/01/23 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js