オーダーメイドコース
icon
icon

PHPで文字コードの判定を行う方法【初心者向け】

初心者向けにPHPで文字コードの判定を行う方法について解説しています。UnicodeなどWebで標準の文字コードは数値として管理されています。実際にソースコードを書いて説明しているので、ぜひ参考にしてみてください。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

PHPで文字コードの判定を行う方法について解説します。

文字コードとは何なのか説明しているので、ぜひ理解しておきましょう。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPで文字コードの判定を行う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

文字コードとは

文字コードと言えば一般的には「Shift-JIS」や「UTF-8」などのキーワードを連想される方も多くいるかと思います。
ですが、これらは正確には符号化方式と呼ばれるものにあたります。

実は文字コードという概念には2つの概念が含まれておりまして、1つ目は「文字集合」、2つ目は「符号化方式」と呼ばれるものです。

まず「文字集合」とは、その名のとおり文字の集合体と考えてください。
例えば、日本語では「ひらがな」「カタカナ」「漢字」といった様々な種類の文字がありますよね。
これらの日本語を表せる文字の集合として有名なのが「JIS X 0208」です。
もちろん、この「JIS X 0208」には中国語やベトナム語などの文字列は含まれていません。

もう一つ有名な文字集合は「Unicode」です。
「Unicode」の特徴は世界中で使われているすべての文字の集合体となっていることです。もちろん日本語も中国語やベトナム語も含まれています。

そして、これらの文字集合には1つ1つの文字に対して識別するための唯一の番号が振られています。

 

もうひとつの概念である「符号化方式」とは

文字集合で定義されている各文字に割り当てられている番号に対応するコンピュータが扱う数字の対応表となります。

例えばコンピュータは「あ」等の文字列をUTF-8という「227 129 130」のような数値として認識しています。

例えば、テキストファイルに「あ」と書いてUTF-8で保存した場合は、コンピュータのハードディスクには「227 129 130」という数値が保存されます。

このテキストファイルをエディタで開くときに、エディタは「UTF-8」という文字符号化方式で「227 129 130」を「あ」に変換して表示しています。

最初に述べたように符号化方式には「UTF-8」「Shift-JIS」など多くの種類があります。

「UTF-8」は文字集合「Unicode」に含まれる各文字について「Shift-JIS」は文字集合「JIS X 0208」に含まれる各文字について、文字集合の各文字に割り当てられている番号とコンピュータが扱う数字の対応表を持っています。

 

文字コードの判定の方法

PHPではmb_detect_encoding( )関数を利用して、第一引数に渡した文字列の文字コードを判定します。

ただ、注意点があり、デフォルトではASCII/UTF-8だけの文字コードしか判定できません。

「Shift-JIS」「EUC-JP」などの文字コードを判定させたい場合は第二引数に、’Shift-JIS,EUC-JP’のようにカンマ区切り文字列で渡す必要があります。

返り値は一致した場合は、一致した文字コードを文字列で返却します。一致する文字コードがない場合はfalseが返却されます。

 

参考

php.net-mb-detect-encoding

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

※下記のコードはUTF-8でエンコードされている前提です。

// デフォルトの判定可能な文字コードを確認しましょう!
print_r(mb_detect_order());  // [0] => ASCII [1] => UTF-8

// 文字コードを判定してみよう!
// ① UTF-8とEUC-JPでエンコーディングされた文字列を用意します
$utf8 = "テスト";   // デフォルトはUTF-8でエンコードされてます
$euc = mb_convert_encoding($utf8, 'EUC-JP'); // EUC-JPでエンコードし直した文字列を別の変数に格納します

// ② 文字コードを判定してみましょう
// デフォルトの判定可能な文字コードに含まれないEUC-JPの文字列を判定
print_r(mb_detect_encoding($euc).PHP_EOL); // falseなので何も出力されない
// デフォルトの判定可能な文字コードに含まれるUTF-8の文字列を判定
print_r(mb_detect_encoding($utf8).PHP_EOL); // 「UTF-8」という文字列が出力される
// 判定可能な文字コードにEUC-JPを指定し、EUC?JPの文字列を判定
print_r(mb_detect_encoding($euc).PHP_EOL, 'EUC-JP'); // 「EUC-JP」という文字列が出力される"

 

この記事を監修してくれた方

青木 敦史(あおきあつし)
昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。