php UTF8 文件的签名问题
2009-10-30 21:54
295 查看
也就是 有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签名,不然再次打开文件时,还是系统的默认编码而已。
如果看文件的内容,是看不出任何差别的,以下列文件(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 文件的签名问题
- UTF8文件的签名问题
- 关于php文件使用utf8编码后乱码的问题。
- php如果一片空白,脚本没执行,可能是文件的编码问题,转化成UTF8就正常了
- php smarty truncate UTF8乱码问题解决办法
- PHP大文件上传问题
- 解决:ubuntu16.04下修改mysql字符集为utf8却找不到配置文件的问题
- PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
- PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
- php提取csv格式文件中的字符串出现的问题及解决办法
- php文件下载(解决文件下载后多几个字节的问题) 与封装成类的例子
- php上传2M以上文件限制问题
- php上传2M以上文件限制问题
- 解决包含已存在的php文件,但提示就是找不到的问题
- Discuz!教程之论坛后台文件校验显示丢失m/index.php的问题
- Macfee 杀毒软件“签名文件存在8到29天”问题的解决办法!
- 微信小程序常见问题->上传文件后如何在后台(php)获取文件名解决方法
- PHP中文件上传的一个问题
- 【解惑】PHP中include文件包含路径搜索问题