手机
当前位置:查字典教程网 >编程开发 >php教程 >php UTF8 文件的签名问题
php UTF8 文件的签名问题
摘要:也就是有BOM格式编码,或者无BOM格式编码。如果看文件的内容,是看不出任何差别的,以下列文件(schema.sqlite.sql)内容为例...

也就是 有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 UTF8 文件的签名问题】相关文章:

PHP中preg_match函数正则匹配的字符串长度问题

php的控制语句

解决PHP导出CSV文中文乱码问题

多重條件組合查詢(一)

PHP浮点数精度问题汇总

简单解决新浪SAE无法上传文件的问题

php4的彩蛋

最令PHP初学者头痛的十四个问题

php从文件夹随机读取文件的方法

多文件上传的例子

精品推荐
分类导航