icon
icon

PHPのエスケープ処理について現役エンジニアが解説【初心者向け】

初心者向けにPHPのエスケープ処理について現役エンジニアが解説しています。エスケープ処理とは、出力することの出来ない文字を出力させたり、文字列の途中で改行するなどの特殊な出力を行うための処理です。文字列やダブルクォーテーションをバックスラッシュでエスケープします。また、エスケープ処理には表示される文字列に含まれるHTMLタグやJavaScriptコードを命令として認識されない無害な文字列に変換する処理もあります。

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

監修してくれたメンター

井上 祐介

NEC・Microsoftの認定インストラクター。Z80アセンブラ・C++・C#・PHP・Javaなどの経験を経て業務で使用するプログラムの開発や新入社員プログラミング研修の講師を行った。

PHPのエスケープ処理について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

目次

1時間でできる無料体験!

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

 

大石ゆかり

PHPでダブルクォーテーションを表示しようとしたらエラーがでます。どうしたらいいですか?

ソースコード:

<?php
echo "私は"りんご"が好きです";
?>

エラー画面:

PHP Parse error: syntax error, unexpected identifier "りんご", expecting "," or ";" in /workspace/Main.php on line 2
田島悠介

PHPでのダブルクォーテーションは「文字列の始まりや終了」を表す特別な意味がある記号だから、そのままでは表示できないんだ。

ダブルクォーテーションのような、特別な記号の働きをなくすエスケープ処理が必要だね。

大石ゆかり

エスケープ?何の処理ですか?

田島悠介

エスケープ処理をすると機能を無効にしたり、違う機能をさせたりできるんだ。

「エスケープ」の英語には「脱出する」という意味があるから、本来の機能から「脱出」させるのがエスケープ処理と覚えるのもいいね。

大石ゆかり

そういえば、スマホのゲームに「エスケープ」ってタイトルが付いたゲームがありましたけど脱出ゲームでしたね。

田島悠介

プログラミング言語でのエスケープ処理には特殊記号を表示することと、HTMLタグなどの命令を無効にする2つの役割があるんだよ。

大石ゆかり

そうなんですね。その「エスケープ処理」について教えてください!

田島悠介

じゃあ、特殊記号を表示させる方法から見ていこうか。

 

この記事は、エスケープ処理の概要や、PHPプログラムでエスケープ処理を行う方法について解説しています。PHPを使用した開発にまだ慣れていないという方でも、理解できる内容になっています。

エスケープ処理とは

エスケープ処理とは、特殊記号(あるいはタグなどの命令)で行われる処理を回避して単なる文字として表示したり、逆に普通の文字に改行などの特別な機能を持たせます。

たとえば、「”」(ダブルクォーテーション)をPHPのコードから文字列として表示させたい場合、通常なら「”」は文字列の始まりか終わりを指す特殊記号なのでPHPでは表示ができません。

特殊記号を表示するには、バックスラッシュ(\)または円記号に続けて特殊記号を記述します。

バックスラッシュのようなエスケープ処理に使う文字をエスケープ文字といいます。

エスケープ処理には特殊記号を表示させるだけでなく、HTMLコードやJavaScriptの命令を無効化して安全に表示する使い方もあります。

このようなエスケープ処理はPHPに限らず、他のプログラム言語でも共通に存在する処理です。

※バックスラッシュ(\)を入力しても円記号(¥)がそのまま表示される場合もありますが、PHPでは円記号はバックスラッシュと同じ役割です。

※ダブルクォーテーションをWebページ上に表示するには、HTMLの特殊文字コード「&quot;」を使う方法もあります。

 

バックスラッシュの入力方法について

Windowsで標準的なキーボード配列の場合、バックスラッシュ(\)は日本語キーボードだとバックスペースキーの左側のキー(キーボードの刻印は「¥」)を押すか、右下にある「\」キー(日本語かな表記だと「ろ」の刻印のキー)を押します。

※Windowsでは使用しているアプリやフォント(書体)により、バックスラッシュが円記号で表示される場合があります。
※バックスラッシュの入力はPHPの命令と同じように漢字入力オフ(漢字が入力できない状態)で入力してください。
※URLで使われるスラッシュ(/)と、エスケープ文字のバックスラッシュ(\)は違う記号なので注意してください。

 

またMacの場合だと、「option」キーを押しながら右上の「¥」キーを押すだけで、半角のバックスラッシュが入力できます。
バックスラッシュキー mac

【参考】文字列の囲み方

PHPで文字列を囲むには、(“)ダブルクォーテーションで囲む方法と(‘)シングルクォーテーションで囲む方法があります。

(“)ダブルクォーテーションを文字列の中で使用する場合、(‘)シングルクォーテーションで囲んで「’私は”りんご”が好きです’」のように指定します。

違う記号で囲む方法は、コードの中で文字列を囲む記号が統一できないので、エスケープ処理をするのがおすすめです。

 

特殊記号を表示する

PHPでダブルクォーテーションを含んだ文字列をバックスラッシュでエスケープして表示します。

サンプルコード

ダブルクォーテーションを含んだ「私は”りんご”が好きです」という文章を表示します。

ソースコード

<?php
echo "私は\"りんご\"が好きです";
?>

実行結果

解説

上記のプログラムでは、「”」の前にバックスラッシュ(\)を使用して「”」を単に文字として扱うようにしています。

このようにダブルクォーテーションのような特別な意味を持つ文字の前に「\」のエスケープ文字を使用して「文字列の開始と終了」という特別な効果を打ち消す処理がエスケープ処理です。

 

エスケープシーケンス

上記のように、特殊な記号を文字として出力するためにエスケープ文字を使用した文字の組み合わせをエスケープシーケンスといいます。

エスケープシーケンスを使用することで、文字列の途中で「改行」したり「タブ」を挿入したりといった特殊な処理を行うことも可能です。

エスケープシーケンスを有効にするにはダブルクォーテーションで文字列を囲みます。

以下は、主なエスケープシーケンスの一覧です。

\n 改行
\’ シングルクォーテーション(‘)
\” ダブルクォーテーション(“)
円記号
\$ ドル記号
\t 水平タブ
\\ バックスラッシュ

※PHPの他のエスケープシーケンスについて、詳しくは公式のドキュメント「エスケープシーケンス」をご覧ください。
※エスケープシーケンスが含まれた文字列をシングルクォーテーションで囲むと、「\’」「\\」以外のエスケープシーケンスは機能せずエスケープ文字が表示されてしまいます。

 

エスケープシーケンスを使った例

それでは、実際にエスケープシーケンスを使用する例を見ていきましょう。

サンプルコード

エスケープシーケンスを使った例として、以下の記号の表示をしてみましょう。

  • (‘)シングルクォーテーション
  • 改行
  • タブ
  • ドル記号
  • バックスラッシュ

ソースコード

//preタグで通常のテキストとして表示
echo "<pre>";

// ダブルクォーテーションの表示
echo 'PHPの文字列は「"」か「\'」で囲みます。';

// 改行
echo "\n";
echo "\nりんご\nみかん\nれもん\n";
echo "\n";

// タブ
echo "1\t2\t3\n";
echo "りんご\tみかん\tれもん\n";
echo "\n";

// ドル記号
echo "りんごの価格:\$1\n";
echo "\n";

//バックスラッシュ
echo "PHPで改行するには「\\n」と記述します";

//preタグの終わり
echo "</pre>";

実行結果

エスケープシーケンスの例

解説

2行目のpreタグは出力した改行などをHTML表示でも反映させるためのタグです。

5行目では文字列をシングルクォーテーションで囲っているのでダブルクォーテーション(“)はそのまま表示でき、シングルクォーテーションはエスケープシーケンスで表示します。

8から10行目でエスケープシーケンス「\n」により文字列の途中で改行しています。

13と14行目は文字をそろえる時に便利なタブ文字「\t」(一定間隔の空白を空ける文字)を入力しているので、数字とフルーツの名前がそろっています。

18行目は変数名などで使われるドル記号($)をエスケープして表示しています。

また22行目にあるように、バックスラッシュ(または円記号)自身を表示するときは「\\」と記述します。

シングルクォーテーションで文字列を囲ったときに機能するエスケープシーケンスは、「\’」と「\\」だけです。

 

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

HTMLタグのエスケープ(htmlspecialchars)

エスケープ処理の中にはHTMLタグを無効化する処理も含まれます。

たとえば、エスケープ処理をしていないフォームに「<script>alert(‘Hello!’)</scprit>」と入力すると、入力された文字を表示するときにアラート画面を表示するJavaScriptがそのまま実行されてしまう可能性があります。

エスケープ処理を行うとタグで使われるHTMLの命令であるHTMLエンティティに変換されるので「<」や「>」などの記号は単なる文字として表示する「&lt;」「&gt;」に変わります。

PHPでHTMLタグをエスケープ処理するにはhtmlspecialchars関数を使います。

HTMLエンティティとは、アンパサンド(&)で始まりセミコロン(;)で終わる記号を表示するHTMLの命令を表す文字です。たとえばコピーライトの記号「©」を表示させるHTMLエンティティは「&copy;」です。

※エスケープ処理する関数は、他に特殊記号なども変換できるhtmlentities関数やタグを取り除くstrip_tags関数などもあります。

 

書式

エスケープ処理された文字 = htmlspecialchars( 対象文字列 );

htmlspecialchars関数の第1引数には、エスケープ処理したい文字列を指定します。

第2引数は省略できますが、ダブルクォーテーションなどを変換するかどうかなどの変換パターンを指定します。詳しくは公式ドキュメント「PHP: htmlspecialchars – Manual」のパラメータflagsの項目をご覧ください。

第3引数も省略できて、文字を変換するときの文字コードを指定します。

 

サンプルコード

HTMLタグを含んだ文字列「<b>太字</b><br>」をhtmlspecialchars関数でエスケープ処理して、HTMLタグとして認識されない文字(HTMLエンティティ)に変換します。

ソースコード

<?php
//HTMLタグをそのまま表示(太字になる)
$tag = "<b>太字</b><br>";
echo $tag;

//HTMLタグをエスケープして表示(HTMLエンティティに変換される)
$tag_escape = htmlspecialchars($tag);
echo $tag_escape;
?>

実行結果

HTMLタグをエスケープ

解説

変数 $tagを表示すると、HTMLタグが有効なので<b>タグが有効になり太字で表示され<br>タグで改行されます。

htmlspecialchars関数にエスケープ処理したい変数 $tagを渡します。

エスケープ処理されて「<」「>」の記号がHTMLエンティティに変換され、変数 $tagの文字列は「&lt;b&gt;太字&lt;/b&gt;&lt;br&gt;」になります。

エスケープ処理された変数 $tag_escapeを表示するとHTMLエンティティに変換されているので、太字にも改行にもならず単なる文字として表示されます。

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

まとめ

バックスラッシュ(\)に続けて記述されたエスケープシーケンスを使用することで、特別な効果を持つ「’」や「$」を文字として出力したり、改行やタブのような特殊な処理を行えます。

HTMLタグを無効にするhtmlspecialchars関数でエスケープ処理することで安全な表示が行えます。

エスケープ処理は実務でもよく使いますし、PHP以外のプログラム言語でも使用する処理です。

エスケープ処理とは何か、その使用方法について確実にマスターして実際の開発に役立てましょう。

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

PHPを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!

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

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

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

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

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

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

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

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

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