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 相关文章推荐
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php UTF8 文件的签名问题
Oct 30 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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 变量未定义等错误的解决方法
2011/01/12 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
pyramid配置session的方法教程
2013/11/27 Python
tornado捕获和处理404错误的方法
2014/02/26 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
什么是Smart Navigation?
2016/07/03 面试题
审计工作个人的自我评价
2013/12/25 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
Redis入门基础常用操作命令整理
2022/06/01 Redis