WordPressのUTF-8Nbomとは!文字コード・改行コードについて

Windowsのメモ帳などで、文字コードUTF-8を指定・保存して、サーバーにアップすると、(.htaccessを触った時)500 ERROR Internal Server Errorが出たり、single.phpをアップしたときは文字化けを起こすなど、エラーがでます。

WordPressで運営をしていると文字コード、UTF-8って見かけます。実はUTF-8N(bomなし)が正しいです。また『改行コード』について、追記しました。

WordPress初心者に、文字コード「UTF-8のbom」を理解してもらう為、文字コード・bomの有無について分かりやすくまとめました。時短の目次からどうぞ^^

文字コードのUTF-8とUTF-8N、bomとは何?

スポンサーリンク

文字コードとは何?

IT用語辞典の文字コードの説明は難しいので、WordPress初心者・ITに無縁の人が解りやすいよう、後半ざっくり簡単にまとめてるので、後でチェックしてくださいね。

文字コードとは、文字や記号をコンピュータで扱うために、文字や記号一つ一つに割り当てられた固有の数字のこと。

引用元:文字コード 【 character code 】 キャラクタコード / キャラクターコード|IT用語辞典

「文字や記号に割り当てられてた固有の数字」とは、IMEパッドの「ユニコード:Unicode」文字コードの一覧で″固有の数字″が、どんなものか見ると解りやすいです。

unicode一覧(IMEパッドより)

画面中四角内にある文字をみたら数字が書かれてます。それが「d」の文字コードになります。

Unicode U+0064
UTF-16 0×0064
Shift_JIS 0×64
JIS213 1-3-68

欧米などで使われる英数字の文字コードは1バイトで表現されるが、これでは256文字しか表現できず、日本語の漢字などは収録できないため、日本や韓国、中国などではそれぞれ独自に2バイト(最大65536文字)のコード体系を定め、それぞれ自国内で使用している。

~ 後略 ~

引用元:文字コード 【 character code 】 キャラクタコード / キャラクターコード|IT用語辞典

これでもイマイチわかんないので、つぎチェックしてください❦

文字コード「ASCII」「Shift_JIS」「UTF-8」の違い

バイト数の大きさだけを見て言えば「固有の数字(符号):文字(漢字など)の表現数」が多く使えるほど、バイト数も上がります。

文字コード Byte数 説明
ASCII 1Byte
  • 世界基準
  • 英数字仕様なので、文字数が少ない
JISコード
EUC
Shift_JIS
~2Bytes
  • 漢字など独特の文字も使うため「日本特有のコード」が使われる
  • 英数字漢字ひらがな等にも対応;文字数が多い
Unicode 英数字以外「漢字など」にちょっと弱いみたいなっ
UTF-8 ~4Bytes バイトが増えると、文字形態がめちゃくちゃ多いってイメージすると解りやすい。

2バイト使う漢字の文字コード例

この画像は文字コードで、E5 87 BA E6 9D この2桁の数字1セットで1バイト。漢字の『』1文字ので『E5 87』で、2バイト使っているのが分かります。

ASCIIは1バイトなので変換できないから、文字コードが『ASCII』のファイルで日本語使うと、文字化けを起こし『?????』となる。

このようにプログラム上では人にはわからない文字列に変換されると言えば、ホンノリ分かりやすいです。

参考文字コード 【 character code 】 キャラクタコード / キャラクターコード|IT用語辞典

参考UTF-8 【 8-bit UCS Transformation Format 】:IT用語辞典

UTF-8は、header.php・CSSに「charset・・”utf-8″」と書いてます。書いてないテーマもあり。メリット・デメリットについて解りやすいのは下記ページさんです。

参考文字コードShift-JISとUTF-8の違いって何?|シリウス(SIRIUS)

UTF-8でアップするとエラーがでる!bomとは?

PCのメモ帳や、FFFTPの文字コード設定でUTF-8にして.htaccessをサーバーにアップしたら、管理画面に入れないhttp500エラーが出ます。

UTF-8は(bomあり)と(bomなし)の2種類あり、bomがあるからエラーが出るワケです。ウィキを読んでみると

バイトオーダーマーク (byte order mark) あるいはバイト順マーク(バイトじゅんマーク)は通称BOM(ボム)といわれる、Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

引用元:バイトオーダーマーク

わかれば超適切で「ウィキ凄い」と感動!補足がないと意味不明・理解不能なので説明しますね。

bomとは何?(Byte Order Mark)を見てみよう

文字コードUTF-8のbom(ByteOrderMark)とは。
  • バイトオーダー『ByteOrder』のマーク「Mark」で【bom:ボム】
  • テキストの最初に付く「英文字」が『バイトオーダー』
  • bomとは、英数字のマーク

テキスト前に英数字のマークがあれば『bomあり』、なければ『bomなし』って事です。

英数字のマークは人には見えないので、「バイナリエディタ」と言う文字コードが見えるエディタを使います。画像にある「EF BB BF」がUTF-8のbomの正体!

UTF-8のbomバイトオーダーマーク:EF BB BF

下のUTF-8(bomあり)ファイルを、バイナリエディタで表示したのが上。

UTF-8のbomは、英文字「EF BB BF」これがバイトオーダーのマーク、bomの正体!

ポイント
  • UTF-8Nのbomなしは、bom「EF BB BF」がついてない
  • 「あり」と「なし」ではコンピューターの処理が変わる
  • ありでアップしたらエラーを引き起こす

だからUTF-8(bomあり)でアップすれば、エラーがでる!

bomなしには、「EF BB BF」のマークが付いていない

このUTF-8N(bomなし)のファイルをバイナリエディタで表示させると「EF BB BF」が付いてません。だから、UTF-8Nと解ります。

UTF-8Nは「bomバイトオーダーマーク:EF BB BF」が無いのが解る

画像下UTF-8N(bomなし)。それをバイナリエディタで表示したのが上画像。

いきなり分かりやすいですね。更にウィキペディアのbomを読みすすめると

UTF-8は文字コードとしてASCIIを前提としたプログラムでもおよそ支障なく動作するように設計されているが、BOMによって正常に処理できなくなる場合がある。Unicodeの規格において、UTF-8においてBOMは容認されるが、必須でも勧められるものでもないとされている。[3]また、データベースやメモリへロードするデータなど、内部的なデータ形式では、プログラムの性能や効率の観点から普通BOMは用いられない。

引用元:バイトオーダーマーク

奥が深くて何言ってるのか解んないですよねぇ。。聞きなれた言葉で物凄くざっくりWordPressに絡めて言いますね^^

ファイルによってはbomありにするとエラーがおきる

single.php・.htaccess・wp_config.phpで不具合がでたことあるので、次を見てください。wikiが言っているのを簡単に説明すれば、下記。

  • 「ASCII」でファイルをアップするとの異常起こす場合もある
    • bomでアップすると、single.phpでは文字化けをおこす。(起こしたことある)
    • さらに.htaccessやwp_config.phpでは500エラーを起こす(経験済み)」
  • UTF-8はbomありとbomなしの2種類ある
  • 英数字だけなら「bomあり」で対応できちゃう
  • bomありは、データベースなどの形式でプログラムの性能や効率から使わない

最後の部分!「データベースなどの形式でプログラムの性能や効率の観点から使わない」って事は・・・。

UTF-8はデータベース形式のブログでは「UTF-8N(bomなし)」である!

WordPressは元々UTF-8N(bomなし)だった!!いきなりスッキリ理解できましたよね^^

スポンサーリンク

WordPressはデータベース形式のプログラムだからbomなしが適切

WordPressのheadにmeta charset文字コードの指定されてます。

  • <?php bloginfo( ‘charset’ ); ?>は、下記「WordPress Codex」を見ると「UTF-8を常に返してる」って事が解りますっ。

charset’ – Version 3.5.0 以降は “UTF-8“を常に返します。その前のバージョンでは、管理画面の「設定 > 表示設定」で設定された「ページとフィードのエンコーディング」を表示するものです。このデータは wp_options テーブルの “blog_charset” レコードから取得されるものです。

引用元:テンプレートタグ/bloginfo|WordPress Codex

目で見るともっと解りやすいです。CSSをみると、一行目に「@charset “utf-8”;」ってあるんですねっ。文字コードがUTF-8ですよぉって事です。

CSSの先頭にcharset utf-8

それから書いてないテーマ例えばTwenty Sixteenは書かれてませんけど、そのCSSの文字コードを調べたらUTF-8N(bomなし)です。

Twenty SixteenのスタイルシートもUTF-8N

WordPressの重要ファイルwp-config.phpには、注意書きもあります。

// 注意:
// Windows の “メモ帳” でこのファイルを編集しないでください !
// 問題なく使えるテキストエディタ
//(http://wpdocs.sourceforge.jp/ Codex:%E8%AB%87%E8%A9%B1 %E5%AE%A4 参照)
// を使用し必ず UTF-8 の BOM なし (UTF-8N) で保存してください

引用元:wp-config.php

UTF-8 の BOM なし (UTF-8N) で保存とあるのは、そのコードで元々保存してるからですっ。テキストエディタで文字コードを見たら、UTF-8Nになってます。

ウィキに書いてるように、UTF-8Nが「bomなし」です。日本特有の呼び方だから「@charset “utf-8n”;」とNを付けない、またそんな書き方はないのでしょう。

日本の特殊事情として、このシーケンスがある方をUTF-8、ない方を特にUTF-8Nと呼ぶこともある[11]が、このような呼び分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けもない[12]。

引用元:UTF-8|ウィキペディア

wp-config.phpの引用部分の記載

更に改行コードが「LF」ってなってます。Twenty SixteenのCSSもLFとなってるので、これが正しい書き方!と、ついでに覚えておきましょう^^

改行コード LF、CF+LF、CF の違い。

wp-config.phpの文字コード:UTF-8N、改行コード:LF

wp-config.phpを確認したら、LFとなってますよね。Windowsの環境で他のファイルを見ると、改行コードはCF+LFです。何が違うのか、気になるので追記しますね。

改行の数値表現

多くのシステムでは、改行コードを1つまたは連続する2つの特殊文字で表している。

  • ASCII文字コードに基づくシステムでは、CR(復帰、0x0D)、LF(改行、0x0A)、またはCR+LFで表している。
    • LF: UNIXやUnix系のシステム。Linux、AIX、Xenix、macOS、BeOS、Amiga、RISC OSなど。
    • CR+LF: CP/M、MP/M、MS-DOS、OS/2、Microsoft Windows。
    • CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。

引用元:改行コード|Wikipedia

なるほど!

改行コード OSの種類 OS
LF UNIXやUnix系 Linux(CentOS)macOS
CR+LF Windowsなど
CR Apple IIファミリ
Mac OS(バージョン9まで)

上記引用先であるWikipediaの概要を見ると下記の通り。

概要

改行コード(広義)は以下の2種類であり、システム(ソフトウェア)により片方または両方が使用される。

  • キャリッジリターン(英: carriage return、CR、復帰)
  • ラインフィード(英: line feed、LF、狭義の改行)またはニューライン(newline、line break または end-of-line、EOL)

これらの用語はタイプライターが由来である。タイプライターでは印字装置は固定され、紙の方が上下左右に移動することで、文字送りや行送りが行われる。英語などの左横書きにおける「キャリッジリターン」とは、紙を固定して移動する装置(キャリッジ)を元の位置に戻す(リターン、つまり紙の左端に印字装置が来る)ことである。「ラインフィード」とは紙を必要な行(ライン)だけ上に送る(フィード、つまり下の行に印字装置が来る)ことである。

コンピュータでは、同じ文字コードを使用していても、改行コードは異なる場合があるため、異なるシステム間でのデータの際には、改行が正確に反映されない場合がある。

  • CRは、『左端に印字装置がくる』
    • 左端へ戻る仕様
  • LFは、『下の行に印字装置がくる』
    • 下に送る仕様

つまり、改行の指定方法が微妙に違うと言う事。

なぜWordPressの改行コードはLFと言われるのか。

レンタルサーバーのOSが、UNIXやUnix系で、Linux・CentOSが使用されているサーバーが多いから、『改行コード』は下に送る仕様の『LF』が適切と言われるワケです。

  • エックスサーバー
  • OS:Linux

参考サーバー関連の仕様一覧|エックスサーバー

  • ロリポップ
  • OSの種類:UNIX系OS、OS:Linux(CentOS)

参考サーバーの仕様|ロリポップ

ここまで正確に指定しないといけないかは、ファイルの種類にもよりますよね。親テーマの指定通りで問題なければ、改行コードは『CR+LF』であっても良いでしょう。

万が一エラーが出たときは、サーバーのOSに合わせてください。エックスサーバーやロリポップでは、『LF』が適切という事。ウィキは非常に適切で分かりやすいですね❦

構築した環境によっては、改行コード:LFでエラーが出る可能性も

上述通り。サーバーのOS環境に合わせた改行コードを合わせてください。

LFが良いと一般的に言われても、OSの環境が違えばそれで、エラーがでる可能性があります。

見出し:改行コード LF、CF+LF、CF の違い

UTF-8とUTF-8N(bomあり、なし)のまとめ

  • UTF-8は、文字表現が豊富!その分他の文字コードよりも重たい
  • UTF-8はbom「EF BB BF」が有るバージョン
    ※PCのメモ帳のUTF-8(bomあり)だからエラーが出る
  • UTF-8Nは文字コードの前にbom「EF BB BF」が無い
  • UTF-8とUTF-8Nは処理方法が違う(他の文字コードも)

WordPressでいえばUTF-8N(bomなし)で保存してサーバーにアップする。bomありでアップするとエラーがでるってこと。

さいごに

私はTeraPadを使ってます。初心者向けでホントに使いやすいですよっ。Windows専用ですけど・・。

1番言いたかったのは、UTF-8N(bomなし)でエラーを回避しましょうよぉ!って話です。その為にTeraPadのようなテキストエディタを使って保存しましょ!って事でしたっ。

「処理方法が違うしコードが正常に処理されないと、エラーがでちゃうから。」気をつけましょうねっ♪

wp-config.phpや、.htaccess、functions.phpなどは特に!間違うとブログが真っ白になったり、表示されないことがあります。この機会にローカル環境やサブドメインでテスト環境を作ってみてはどうでしょうか!?

LINKWordPressのサブドメインでテスト環境を作る手順!&ちょっとした知恵的なの

では、かうたっくでしたっ!

トップへ戻る