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

エスケープについて 最短で解説!

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

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

  • 文字として認識されない文字がある
  • htmlタグの中で " が認識されずに正しく出力されない


今回は、上記の問題を解決するための解説をしていきます。キーワードはエスケープです。

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

エスケープってなに?

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

エスケープが必要な理由

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のエスケープについてお話しました。

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

それでは、また。

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

つぶらや

つぶらや

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説