PHPでエスケープが必要な時と方法を最短理解!

50種類以上のIT教材を無料で使える!
0円から学習できるオンラインITスクール「侍テラコヤ」
→さっそく登録する

こんにちは!  独学プログラマー&ライターのつぶらやです。

PHPの勉強をして実際に開発を進めていくと、以下のような事にぶつかる事があります。

  • 文字として認識されない文字がある
  • htmlタグの中で「 " 」が認識されずに正しく出力されない
今回は、上記の問題を解決するための解説をしていきます。キーワードはエスケープです。

それでは進めていきましょう。

エスケープってなに?

エスケープを行うと「キーボードから入力できない文字を出力させる」「解釈が違う文字の効果を打ち消す」などの効果があります。ちょっと難しいですね。わかりやすく説明して行きます。


【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

エスケープが必要な理由

PHPコード内でhtmlタグや改行などを記述する際にエスケープをしていないと、ブラウザで正しく表示されません。それどころかエラーが発生して処理が止まってしまう場合もあります。

例をあげて解説していきます。

文字として認識されない文字がある場合

echo '<

class='title_class'>なんでも日記</h2>';

タイトルを表示しようとして上記のようなコードを書いたとします。

ブラウザ表示結果
HTTP ERROR 500
エラーログ
PHP Parse error:  syntax error, unexpected 'title_class' (T_STRING), expecting ',' or ';' in ...略

ブラウザは表示されませんし、エラーログに文法エラーが出て処理が止まってしまいました。「'」(シングルクォーテーション)で囲まれた文字列の中に、更に「'」(シングルクォーテーション)で囲まれた文字列が存在しているからです。

こんな場合は、以下のようにします。

echo '<

【何から学べばいいかわからない…そんな悩みを解決します!】

完全無料ですぐわかる「プログラミング学習プラン診断」

・適性にあわせて学習プランを診断
・完全無料で気軽に診断できる
・学習の悩みもまるっと解決

さっそく診断してみる

class='title_class'>なんでも日記</h2>';

ブラウザ表示結果
なんでも日記

このように「」を「'」の前につける事でブラウザに表示する事が出来ました。

これがエスケープ処理です。

PHPコード内で出力文字列を改行する場合

では、改行する場合はどうでしょうか。

通常キーボードのキーを押すと押したキーに対応した文字が入力されますが、改行であるEnterキーは何も表示されずに改行がされるだけです。

PHPの中ではどのようになるでしょうか。試してみましょう。

echo "なんでも
日記";
※なんでもの後改行キーを押しています。

ブラウザのソースコード結果
なんでも日記
因みに結果確認をしているのはブラウザのソースコードです。PHPで生成されるhtmlに対して改行されます。

ブラウザはhtmlタグの<br />でしか改行されません。

それではここでまたエスケープの出番です。

echo "なんでもn日記";
ブラウザのソースコード結果
なんでも
日記

改行できました! でも、あれ? 「」はエスケープで使うとお話しましたが、nってなんでしょうか。

それは次の項目でお話しします。

バックスラッシュ「\」でエスケープする方法

「\」エスケープする記述方法をエスケープシーケンスと呼びます。前項で使用した¥'や¥nも実はエスケープシーケンスの一種です。

以下に代表的なエスケープシーケンスを記載します。

種類説明 エスケープシーケンス
改行 ¥n
左括弧 ¥(
右括弧 ¥)
左角括弧 ¥[
右角括弧 ¥]
シングルクォーテーション ¥'
ダブルクォーテーション ¥"
円文字 ¥¥
ドル文字 ¥$
よく使う記号ばかりなので覚えておいて損はありません。

ただしエスケープシーケンスはクォーテーションで囲まれていないと効果がありません。

シングルクォーテーションで囲むと、エスケープシーケンスも一緒に文字列として認識されますので注意してください。

PHPのエスケープ関連の関数

最後に簡単にエスケープする方法として、2つの関数を紹介します。

addslashes関数

以下のサンプルを見てください。

$escape_test = "escape'PHP'"; // 変数にエスケープしたい文字列を代入
echo addslashes($escape_test); // addslashes関数に変数を渡して、結果を表示させる
結果
escape'PHP'

addslashes関数はシングルクォーテーションなどのエスケープシーケンスに含まれる文字や記号を自動的にエスケープしてくれる関数です。サンプル例では、シングルクォーテーションがエスケープされているのがわかりますね。

var_export関数

var_export関数もaddslashes関数と同じように使用できます。

先ほどのサンプルに当てはめてみましょう。

$escape_test = "escape'PHP'";
echo var_export($escape_test);
結果
'escape'PHP''
結果がaddslashes関数と少し違いますね。

文字列として出力されるためダブルクォーテーションがシングルクォーテーションに置き換わります。この点がaddslashes関数と違う点ですが、エスケープは同じようにされています。

まとめ

今回はPHPのエスケープについてお話しました。

文字やタグを表示させる時には注意してください。うまく表示されない場合やシンタックスエラー(文法エラー)が出た場合には、エスケープが必要な文字を使用していないか疑ってみると解決する場合もあるかもしれません。

それでは、また。

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close