ここでは文字を扱う際に必要となる、エスケープシーケンス(エスケープ文字)と文字実体参照とは何か、そして、エスケープシーケンスと文字実体参照は何故プログラム上で使用しなければならないのか、を簡単にまとめたいと思います。
1.エスケープシーケンスとは
PHPを例として、「私の名前は"鈴木"です。」と表示したい場合を考えます。
~ 例 ~
<?php
//例:
echo "私の名前は"鈴木"です。";
?>
~ 結果 ~
syntax error, unexpected '鈴木' (T_STRING), expecting ',' or ';'
この場合、エラーになります。PHPは文字範囲を「"私の名前は"」までで認識してしまい、その後に続く「鈴木"です。」の最初に「"」がないためエラーになっています。
このように文字範囲を示す「"」ですが、文字範囲ではなく、本来の「"」ダブルクオーテーションの意味で使いたい場合、「"」の前に「\」をつけて「\"」とすることで、文字範囲を示す「"」と区別します。
この「\」をエスケープシーケンス(エスケープ文字)と呼びます。
そして「\」に続く、その文字本来の意味とは異なり、プログラムで特別な意味を持った文字、この場合は「"」のことをメタ文字と呼びます。
以下の通り、エスケープシーケンスを入れることで正しい結果が出力されます。
~ 例 ~
<?php
//例:
echo "私の名前は\"鈴木\"です。";
?>
~ 結果 ~
私の名前は"鈴木"です。
また、以下のように、本来文字として表現できない「改行」について、以下の通りエスケープシーケンスと改行コードを組み合わせることで、表現することができます。
~ 例 ~
<?php
//例:
echo "私の名前は\r\n鈴木です。";
?>
~ 結果 ~
私の名前は
鈴木です。
【主なエスケープシーケンス一覧】
記号 |
意味 |
¥r |
復帰(CR) |
¥n |
改行(LF) |
¥t |
タブ |
¥' |
シングルクオーテーション |
¥" |
ダブルクオーテーション |
¥\ |
\(エスケープシーケンス自体) |
¥$ |
$(関数のプレフィックス:PHP) |
正規表現において、検索に使用する「+」「*」などのメタ文字をそのまま表示したい場合も同じで「\」でエスケープします。
※Linux環境では「¥」は「\」バックスラッシュです。
2.文字実体参照とは
PHPを例として、以下の通り、文字列を「"(ダブルクォーテーション)」で囲う場合と「'(シングルクォーテーション)」で囲う場合で、変数が展開される変数が展開されないという違いがあります。
~ 例 ~
<?php
//例:
$var="鈴木";
echo "私の名前は{$var}です。\r\n";
echo '私の名前は{$var}です。';
?>
~ 結果 ~
私の名前は鈴木です。
私の名前は{$var}です。
これに対して、HTML5、XML等のマークアップ言語については、変数という概念ではないのですが、ファイル全体がダブルクォーテーションで囲まれていると言える状態です。よって全体に対してタグが解釈されます。
このため、シングルクォーテーションで囲まれたように、そのまま表示するための<pre>タグが用意されていますが、以下のように<pre>自体を表示したい場合、タグとして解釈されてしまうため、表示することができません。
~ 例 ~
<html>
<body>
<pre><pre>と表示したい。</pre>
</body>
</html>
~ 結果 ~
と表示したい。
このように「<」、「>」等、そのまま表示したい場合、以下のように文字実体参照を使用します。
【主な文字実体参照一覧】
文字実体参照 |
文字コード参照 |
意味 |
< |
< |
< |
> |
> |
> |
& |
& |
& |
" |
" |
" |
' |
' |
' |
上記例以外も、UNICODEの文字コードを指定することができるため、実質すべての文字を、この書き方で表現できるのですが、上記の5文字以外はほぼ使うことはありません。
~ 例 ~
<html>
<body>
<pre><pre>と表示したい。</pre>
</body>
</html>
~ 結果 ~
<pre>と表示したい。
※VBについては旧システム(VB6.0)との互換性を保持するため以下のような文字実体参照があります。
文字実体参照 |
意味 |
vbCrLf |
CRLF(復帰改行) |
vbTab |
タブ |