PHPで文字列を表す場合は、ダブルクォーテーションなどで囲みます。
しかし、文字列として認識されずにエラーになる場合も発生するでしょう。
そんな困った時に確認をして頂きたいのがエスケープ。
今回はエスケープについて以下の内容でお話します。
【解説】エスケープとは
【実践】ダブルクォーテーションをエスケープしてみよう
【番外】関数でエスケープ
丁寧に解説していきますので是非最後までご覧ください。
エスケープについて
エスケープとはなんでしょうか。
どんな時に必要でしょうか。
例を見ながら考えていきましょう。
ダブルクォーテーションのエスケープ
以下のようなサンプルコードを準備しました。
<?php echo "<a href="https://www.sejuku.net/">侍エンジニア</a>";
ブラウザに「侍エンジニア」のリンクを表示させるだけです。
結果は、以下のエラーになります。
Parse error: syntax error, unexpected 'https' (T_STRING), expecting ',' or ';' in ★エラーのファイルパス on line エラーの★行数
このエラーはダブルクォーテーションがダブルクォーテーションに囲まれている事が原因です。
つまり、ダブルクォーテーションで囲まれてもダブルクォーテーションは文字列として認識されません。
文字列として認識させるために行うのがエスケープです。
実際のエスケープ処理は【エスケープを行う】の章で説明します。
ダブルクォーテーション以外のエスケープ
ダブルクォーテーション以外にも、エスケープ処理が必要なものがあります。
・【’】シングルクォーテーション
・【\n】改行
・【\t】タブ
・【$】ドル
・【\】バックスラッシュ
なども、ダブルクォーテーションと同じようにエスケープが必要です。
エスケープの必要性についてご理解いただけたでしょうか。
それでは次章からエスケープの方法を解説していきます。
エスケープを行う
エスケープを行う上で使用するのは、エスケープシーケンスです。
以下のような種類があります。
・【"】ダブルクォーテーション
・【’】シングルクォーテーション
・【\n】改行
・【\t】タブ
・【$】ドル
・【\】バックスラッシュ
このエスケープシーケンスを使用して、前章でエラーになったコードを修正してみましょう。
<?php echo "<a href="https://www.sejuku.net/">侍エンジニア</a>";
ダブルクォーテーションのエスケープシーケンスは【"】です。
ダブルクォーテーションの前に【】をつけてエスケープシーケンスに変更します。
結果 侍エンジニア
ブラウザに文字リンクとして表示される事を確認しました。
ダブルクォーテーション以外のエスケープも同じです。
エスケープシーケンスに置き換えることで文字列として認識させることが出来ます。
関数でエスケープ
ダブルクォーテーションのエスケープについてご理解頂けたと思います。
ポイントは「エスケープシーケンスに置き換える」ですね。
ただ、以下の場合が発生した場合はどうでしょうか。
・文字列が長く、全てをエスケープシーケンスに置き換えるのが難しい。
・データベースからのデータ取得のためデータの中身がわからず置き換えられない。
こんな場合は関数を使用しましょう。
エスケープ(addslashes)
文字列をaddslashes関数を使用して、エスケープしてみましょう。
関数の使い方は以下です。
addslashes(★エスケープしたい文字列★);
[su_spacer size=”5″]それでは実際に以下のコードで確認します。
<?php echo addslashes("samurai's school");
[su_spacer size=”5″]
結果 samurai's school
[su_spacer size=”5″]
エスケープされていることが確認できました。
※addslashes関数でエスケープ出来るのは、ダブルクォーテーション、バックスラッシュ、シングルクォーテーション、Nullの4種類のみです。
アンエスケープ(stripslashes)
文字列をstripslashes関数を使用して、アンエスケープしてみましょう。
使い方は以下です。
stripslashes(★アンエスケープしたい文字列★);
[su_spacer size=”10″]それでは実際に、addslashes関数でエスケープされた文字列を、アンエスケープで元の文字列に戻します。
<?php $samurai_test = "samurai's school"; echo addslashes($samurai_test); // ① echo "<br />"; // ② echo stripslashes($samurai_test); //③
[su_spacer size=”5″]
①addslashesでエスケープした結果を出力しています。
②画面を見やすくするため、改行の<br>タグを出力しています。
③stripslashesでアンエスケープした結果を出力しています。
結果 samurai's school samurai's school
[su_spacer size=”10″]
stripslashesによって、エスケープ前の値に戻る事がわかりました。
まとめ
本日はPHPのダブルクォーテーションのエスケープについてお話しました。
文字列を扱う時には大事な要素ですので是非整理して覚えてください。
それでは、また。