文字列のエスケープ
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの基本文法 >> 文字列のエスケープ

文字列のエスケープ

文字列中にクォートや特殊文字が重複する場合

  • 別の引用府で囲むエスケープ処理をする

引用符のエスケープ処理

PHPスクリプト中ではHTMLタグも「文字列」として扱いますが、タグの属性を挿入する時に注意しなくてはいけない事があります。HTMLタグの属性には「"」や「'」を使います。これはPHPで文字列をあらわす時に使う記号と同じですが、普通に書くとどうなるでしょう。

間違った構文

PHPエラー構文
<?php
// この構文はエラーが出ます。
echo "<a href="http://www.php.net/manual/ja/">PHP日本語マニュアル</a>";
?>

出力結果

Parse error: parse error, expecting `','' or `';'' in (ファイルパスとエラー行数)

と、エラーが表示されて実行されません。何が悪いかというと、「echo "文字列"」の括りの中にさらに「"」が入っています。

この場合はこの部分の「"」は文字列の括りを意味する「"」じゃなくて、そのまま出力してほしいんです、とPHP君にお願いするわけですが、そういうお願いをエスケープ処理といい、それにはエスケープ文字というものを使います。

エスケープ処理とはあるデータ形式中で特別な意味を持つ記号や文字などを一定のルールに従って変換する事をいいます。HTML文章でも、「<」や「>」をそのまま表示したい時は「&lt;」や「&gt;」と入力したと思いますが、それと同じ要領です。

PHP中では「"」は「文字列を扱う時に括る」という意味を持った記号ですので、この「"」の中でさらにHTMLとしての「"」を扱う場合にはエスケープしなきゃいけません。PHPでのエスケープ文字は「\」です。このエスケープ文字「\」をエスケープしたい文字の前につけます。

エスケープ処理

エスケープサンプル

  1. <?php
  2. // 重複する「"」の前に\をつけてエスケープ処理をする
  3. echo "<a href=\"http://www.php.net/manual/ja/\">PHP日本語マニュアル</a>";
  4. ?>

出力結果

別の引用符で囲む

さらには文字列を扱うのに使った引用符とは別の引用符で括るこんな記述方法でもOKです。

  1. <?php
  2. // PHPの文字列としての扱いは「"」。HTMLの属性として「'」
  3. echo "<a href='http://www.php.net/manual/ja/'>PHP日本語マニュアル</a>";
  4. ?>

出力結果

文字列の扱いを「'」(シングルクォート)でした場合には「"」(ダブルクォート)はエスケープしなくてよく、「'」(シングルクォート)はエスケープします。

いろいろなサンプル

  1. <?php
  2. // シングルクォートで文字列を扱い、HTMLタグの属性もシングルクォート
  3. // エスケープ処理が必要
  4. echo '<a href=\'http://www.php.net/manual/ja/\'>PHP日本語マニュアル</a>';
  5.  
  6. // シングルクォートで文字列を扱い、HTMLタグの属性はダブルクォート
  7. // エスケープ処理の必要なし
  8. echo '<a href="http://www.php.net/manual/ja/">PHP日本語マニュアル</a>';
  9. ?>

ちなみにヒアドキュメントの場合には性質上「"」(ダブルクォート)や「'」(シングルクォート)をエスケープする必要はありません。

特殊文字と「\」のエスケープ処理

改行を表す特殊文字「\n」の場合、「'」が特殊文字を解さないのに対し、「"」は特殊文字を解します。「\n」をそのまま出力したい時は「'\n'」とシングルクォートの中に入れるか、ダブルクォーテーションで括りたい場合は「"\\n"」と特殊文字ごとエスケープします。

特殊文字のエスケープ処理

  1. <?php
  2. print "ダブルクォートで特殊文字の「\\n」を出力します。<br />\n";
  3. print 'シングルクォートの場合は「\n」はそのまま出力されます。';
  4. ?>

出力結果

ダブルクォートで特殊文字の「\n」を出力します。
シングルクォートの場合は「\n」はそのまま出力されます。

特殊文字には\nの他に\r、\tがあります。\nと\rは改行処理で説明したと思いますが、\tは「タブ」です。

特殊文字一覧
特殊文字 コード ASCII 説明
\n LF 0x0A(10) ラインフィード
\r CR 0x0D(13) キャリッジリターン
\t HT 0x09(9) タブ

これらを「"」内でそのまま出力させるには「\n」と同じようにエスケープ処理が必要になります。

「\」「$」のエスケープ処理

また、「\」や「$」をそのまま出力したい場合にもシングルクォートで括るか、「"\\"」などとエスケープ処理しなければなりません。

\記号のエスケープ処理

  1. <?php
  2. print "お会計は\\1253になります。";
  3. ?>

出力結果

お会計は\1253になります。

$記号のエスケープ処理

「$」はPHPの変数を表すために使う記号ですので、こちらもそのまま出力したい時はシングルクォートで括るかエスケープしなければいけません。

参考 PHPの変数

  1. <?php
  2. print "\$」記号もエスケープ処理が必要です。\n";
  3. ?>

出力結果

「$」記号もエスケープ処理が必要です。

さてここまで長々と解説してきましたが、これでやっと!!PHPの基本文法は終わりです。おつかれさまでした。