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 检查扩展库或函数是否可用的代码
Apr 06 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
自制PHP框架之设计模式
May 07 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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 str_pad 函数用法简介
2009/07/11 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
js表单登陆验证示例
2016/10/19 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
深入浅析javascript函数中with
2018/10/28 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中下划线的使用方法
2015/03/27 Python
Python 通配符删除文件的实例
2018/04/24 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
Python短信轰炸的代码
2020/03/25 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
六十岁生日答谢词
2014/01/10 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python