フルスタックエンジニアのノウハウ
2021.01.29    2022.06.11

エスケープ処理とは?

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


エスケープ処理とは?


エスケープ処理とは、プログラムの中で使う特殊な記号を「ただの文字」として扱いたい時に行う処理です。


例えば、PHPの中で文字列を扱う場合、その文字列はこのようにダブルクォーテーション(またはシングルクォーテーション)で囲む必要があります。


このように書くと、「明日の天気は晴れです。」と画面に出力されます。




では、ダブルクォーテーションそのものを画面に出力したい場合はどうすれば良いでしょうか?


このように、ダブルクォーテーションの中に、普通にダブルクォーテーションを書いてしまうと、



ここから、ここまでがダブルクォーテーションの囲いだとPHPが判断してしまい、実行エラーになります。





そこで使うのが「エスケープ処理」です。


PHPなどのプログラミング言語では、\(円記号)が「エスケープ文字」とされており、これを前に付けることで、その文字を構文ではなく「ただの文字」として認識させることが出来ます。


つまり、このようにします。




ただの文字として扱いたいダブルクォーテーションの前に、円記号を付ければOKです。


円記号は必ず、半角で入力してください。


なお、使用しているエディタやブラウザの文字コード設定によっては、円記号は「バックスラッシュ」で表示されることもありますが、意味は同じなので覚えておきましょう。



実際の例


実際のWebプログラムでよくあるエスケープ処理の例としては、PHPの処理の中でHTMLタグを出力したい場合などです。


例えば、このようなHTMLタグをPHPの処理の中で出力したい場合、



そのまま書いてしまうと、先ほどと同じようにダブルクォーテーションがPHPの構文として認識され、エラーになってしまいます。




そのため、このように文字列として扱いたいダブルクォーテーションの前にエスケープ文字を入力します。




これで、これらのダブルクォーテーションは特殊な記号ではなく、ただの文字として認識されるようになりました。



文字表現出来ない「特殊な値」の代替文字


また、エスケープ処理は、特殊記号をただの文字として認識させることの他に、文字として表現出来ない「特殊な値」を表現するためにも使われます。


例えば、「改行」や「Tab」などです。


これらも、そのまま入力してしまうと、ソースコード内での改行やTab入力になってしまいますが、文字データとして入力したい場合もあります。


改行やTabなどの特殊文字は、円記号で始まる代替文字がそれぞれ用意されており、例えば、改行は「\n(または\r\n)」、Tabは「\t」のようになっています。


これを「エスケープシーケンス」と言います。


プログラムの中で、文字データの中にこれらの特殊文字を入れたい場合は、対応するエスケープシーケンスを使うようにしましょう。


このように、ソースコードの中で円記号が出てきたら、直後の記号をエスケープしているか、エスケープシーケンスを使って特殊文字を入力しているんだなと覚えておきましょう。



HTMLタグのエスケープ処理


HTMLタグにも、エスケープ処理があります。


HTMLタグの場合は、タグを記述するために使う「>(大なり)」「<(小なり)」などの記号や、ダブルクォーテーションなどは「&(アンパサンド)」で始まり、「;(セミコロン)」で終わる特殊なエスケープ文字がそれぞれ用意されています。




HTMLの中で、これらの記号を「ただの文字」として扱いたい場合は、それぞれ対応するエスケープ文字を使うようにしましょう。


また、Webアプリを作る際、ユーザーが画面の入力ボックスに入力したデータを、別の画面で表示するといったことが多くありますが、ユーザーが入力したデータの中に、万が一タグなどの記号が含まれていた場合、表示する際にタグとして処理されてしまったり、スクリプトが実行されてしまったりする可能性があります。


そのため、ユーザーが入力したデータを画面に表示する際は、先程の方法で特殊記号をエスケープ処理するようにします。


ちなみに、これを「XSS(クロスサイトスクリプティング)対策」と言います。



まとめ


ということで、今回は「エスケープ処理」について解説しましたが、いかがだったでしょうか?


まとめると


①エスケープ処理とは、プログラムの中で使う特殊な記号を「ただの文字」として扱うこと。

②エスケープ文字(円記号)を直前に付ければOK。

③改行やTabなどは、対応するエスケープシーケンスが用意されている。

④HTMLタグの記号も代替のエスケープ文字が用意されている。

⑤ユーザーが入力したデータはエスケープ処理を行う。


ということでした。是非参考にしてみてください。


おすすめ記事