php UTF8 文件的簽名問題
更新時(shí)間:2009年10月30日 21:54:26 作者:
在我們保存UTF8文本文件的時(shí)候,可以選擇帶簽名,或者不帶簽名。
也就是 有BOM 格式編碼,或者 無BOM格式編碼。
如果看文件的內(nèi)容,是看不出任何差別的,以下列文件(schema.sqlite.sql)內(nèi)容為例:
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字節(jié),如果帶簽名,則文件大小為235字節(jié)。
UTF8簽名有3個(gè)字節(jié)(內(nèi)容為:EFBBBF),是專門用來告訴軟件:該文件是UTF8編碼的。
在一般情況下,有無簽名不會(huì)帶來問題,因?yàn)榫庉嬈骰蛘咂渌浖梢园凑瘴谋镜膬?nèi)容來推斷出是否是UTF8。
但有些時(shí)候還是會(huì)導(dǎo)致問題,比如上訴文件。該文件是sql語句文件,程序恰好要通過以下語句(php)來執(zhí)行該sql:
$schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql');
$dbAdapter->getConnection()->exec($schemaSql);
在這種情況下,帶有簽名的文件就會(huì)導(dǎo)致問題了,因?yàn)椤癠TF8簽名用的三個(gè)字節(jié)”其實(shí)是位于文件的最前面。所以導(dǎo)致了上面的語句無法成功運(yùn)行。
解決的辦法也很簡(jiǎn)單,去掉該文件UTF8簽名即可。
當(dāng)然,上面文件的內(nèi)容其實(shí)都是單字節(jié)的,是沒有必要保存為UTF8編碼的。
補(bǔ)充:全部是單字節(jié)內(nèi)容的文件除非加了UTF8簽名,不然再次打開文件時(shí),還是系統(tǒng)的默認(rèn)編碼而已。
如果看文件的內(nèi)容,是看不出任何差別的,以下列文件(schema.sqlite.sql)內(nèi)容為例:
schema.sqlite.sql
復(fù)制代碼 代碼如下:
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字節(jié),如果帶簽名,則文件大小為235字節(jié)。
UTF8簽名有3個(gè)字節(jié)(內(nèi)容為:EFBBBF),是專門用來告訴軟件:該文件是UTF8編碼的。
在一般情況下,有無簽名不會(huì)帶來問題,因?yàn)榫庉嬈骰蛘咂渌浖梢园凑瘴谋镜膬?nèi)容來推斷出是否是UTF8。
但有些時(shí)候還是會(huì)導(dǎo)致問題,比如上訴文件。該文件是sql語句文件,程序恰好要通過以下語句(php)來執(zhí)行該sql:
復(fù)制代碼 代碼如下:
$schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql');
$dbAdapter->getConnection()->exec($schemaSql);
在這種情況下,帶有簽名的文件就會(huì)導(dǎo)致問題了,因?yàn)椤癠TF8簽名用的三個(gè)字節(jié)”其實(shí)是位于文件的最前面。所以導(dǎo)致了上面的語句無法成功運(yùn)行。
解決的辦法也很簡(jiǎn)單,去掉該文件UTF8簽名即可。
當(dāng)然,上面文件的內(nèi)容其實(shí)都是單字節(jié)的,是沒有必要保存為UTF8編碼的。
補(bǔ)充:全部是單字節(jié)內(nèi)容的文件除非加了UTF8簽名,不然再次打開文件時(shí),還是系統(tǒng)的默認(rèn)編碼而已。
您可能感興趣的文章:
相關(guān)文章
php簡(jiǎn)單創(chuàng)建zip壓縮文件的方法
這篇文章主要介紹了php簡(jiǎn)單創(chuàng)建zip壓縮文件的方法,實(shí)例分析了php基于ZipArchive實(shí)現(xiàn)文件壓縮的相關(guān)技巧,需要的朋友可以參考下2016-04-04
PHP實(shí)現(xiàn)的一致性Hash算法詳解【分布式算法】
這篇文章主要介紹了PHP實(shí)現(xiàn)的一致性Hash算法,結(jié)合實(shí)例形式詳細(xì)分析了php一致性Hash算法的概念、原理及相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-03-03
PHP中上傳多個(gè)文件的表單設(shè)計(jì)例子
這篇文章主要介紹了PHP中上傳多個(gè)文件的表單設(shè)計(jì)例子,本文著重講解的是表單如何設(shè)計(jì),后端處理需要循環(huán)$_FILES數(shù)組來實(shí)現(xiàn),需要的朋友可以參考下2014-11-11
PHP數(shù)組式訪問接口ArrayAccess用法分析
這篇文章主要介紹了PHP數(shù)組式訪問接口ArrayAccess用法,結(jié)合實(shí)例形式分析了數(shù)組式訪問接口ArrayAccess的概念、功能、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2017-12-12
php代碼審計(jì)之ThinkPHP5的文件包含漏洞詳解
這篇文章主要介紹了php代碼審計(jì)之ThinkPHP5的文件包含漏洞,較為詳細(xì)的分析了thinkphp5文件包含漏洞的形成原因與危害,需要的朋友可以參考下2023-06-06
php獲取當(dāng)前網(wǎng)址url并替換參數(shù)或網(wǎng)址的方法
今天在項(xiàng)目中用到的兩個(gè)函數(shù),自己寫了下,備用,需要的朋友也可以直接使用了,推薦第一個(gè)函數(shù)為獲取,后面為相關(guān)的處理參數(shù)。2010-06-06
PHP array_flip() 刪除重復(fù)數(shù)組元素專用函數(shù)
array_flip() 返回一個(gè)反轉(zhuǎn)后的 array,例如 trans 中的鍵名變成了值,而 trans 中的值成了鍵名。2010-05-05

