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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

つぶらや

つぶらや

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

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー