UTF8 ファイルの署名の問題と解決策_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:55:43
オリジナル
931 人が閲覧しました

UTF8 テキスト ファイルを保存するときに、署名するかどうかを選択できます。つまり、BOM 形式のエンコーディングがあるか、BOM 形式のエンコーディングがありません。ファイルの内容を見ると、違いはありません。次のファイル (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'); -> getConnection()->exec($schemaSql);

この場合、「UTF8 署名に使用される 3 バイト」が実際にはファイルの先頭にあるため、署名付きのファイルは問題を引き起こします。その結果、上記のステートメントは正常に実行できません。

解決策も非常に簡単で、ファイルの UTF8 署名を削除するだけです。

もちろん、上記のファイルの内容は実際にはシングルバイトなので、UTF8エンコードで保存する必要はありません。

補足: シングルバイトのコンテンツを含むファイルに UTF8 署名が追加されていない限り、そのファイルを再度開いたときは、引き続きシステムのデフォルトのエンコーディングが使用されます。



http://www.bkjia.com/PHPjc/364391.html

www.bkjia.com

http://www.bkjia.com/PHPjc/364391.html技術記事 UTF8 テキスト ファイルを保存するときに、署名を付けるかどうかを選択できます。つまり、BOM 形式のエンコーディングがあるか、BOM 形式のエンコーディングがありません。ファイルの中身を見てみると…
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート