icon
icon

PHPで文字コードを変換する方法【初心者向け】

初心者向けにPHPで文字コードを変換する方法について解説しています。外部から送信されてきた文字列を変換できるようになりましょう。mb_convert_encoding( )関数を使って実際にソースコードを書いているので、参考にしてみてください。

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

PHPで文字コードを変換する方法について解説します。

mb_convert_encoding関数を使って文字コードを変換する書き方について説明しているので、ぜひ理解しておきましょう。

 

そもそも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」に含まれる各文字について、文字集合の各文字に割り当てられている番号とコンピュータが扱う数字の対応表を持っています。

 

文字コードを変換する方法

mb_convert_encoding( )関数を利用します。

第1引数:
        変換する文字列を指定します

第2引数:
        変換後の文字コードを指定します

第3引数(省略可):
        変換前の文字コードを指定します
        省略した場合はmb_internal_encoding()関数で取得できる文字コードが設定されます

 

参考URL

※指定できる文字コードは下記のドキュメントを参照してください。
php.net-mbstring-encoding

 

[PR] PHPプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

下記の例では、実行ファイルの文字コードと内部文字エンコーディングがUTF-8であることを前提とします。

$str = "オリジナル";

//①文字コードを変換して保存してみよう!

// 内部エンコーディング(UTF-8)からEUC-JPに変換します
$euc =  mb_convert_encoding($str, "EUC-JP");
// UTF-8からSJISに変換します
$sjis =  mb_convert_encoding($str, "SJIS", "UTF-8");

// 変換した文字列をファイルに保存するとEUC-JPで保存されています
file_put_contents("euc.txt", $euc);
// 変換した文字列をファイルに保存するとSHIFT-JISで保存されています
file_put_contents("sjis.txt", $sjis);


// ② 実行ファイルとは異なる文字コードの文字列を変換して表示してみよう!

// 先程保存した異なる文字コードのファイルから文字列を取得します
$euc = file_get_contents("euc.txt");
$sjis = file_get_contents("sjis.txt");

// それぞれ正しい文字コードからUTF-8に変換すると「オリジナル」が表示されます
echo '------------ 正しい変換 ------------ '.PHP_EOL;
echo mb_convert_encoding($euc, "UTF-8", "EUC-JP").PHP_EOL;
echo mb_convert_encoding($sjis, "UTF-8", "SJIS").PHP_EOL;

// 元の文字コードとは別の文字コードを指定して変換すると文字化けが発生します
echo '------------ 誤った変換 ------------ '.PHP_EOL;
echo mb_convert_encoding($euc, "UTF-8", "SJIS").PHP_EOL;
echo mb_convert_encoding($sjis, "UTF-8", "EUC-JP").PHP_EOL;

// 第3引数にコンマ区切りや配列で複数の文字コードを指定することもでき、複数の中から該当する文字コードでエンコーディングされます
echo '------------ 複数の文字コードを指定して変換 ------------ '.PHP_EOL;
echo mb_convert_encoding($euc, "UTF-8", "UTF-8,EUC-JP").PHP_EOL;
echo mb_convert_encoding($sjis, "UTF-8", ["JIS", "SJIS"]).PHP_EOL;

 

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

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

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

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

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する