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 相关文章推荐
3.从实例开始
Oct 09 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
python遍历数组的方法小结
2015/04/30 Python
Python实现在线音乐播放器
2017/03/03 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
python logging模块的使用总结
2019/07/09 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
ASP.NET中的身份验证有那些
2012/07/13 面试题
学生处主任岗位职责
2013/12/01 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
婚礼主持结束词
2014/03/13 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python