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だけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

つぶらや

つぶらや

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

おすすめコンテンツ

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

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