【PHP】特殊文字とエスケープシーケンス – 文字列中のダブルクォートや改行の使い方

【PHP】特殊文字とエスケープシーケンス – 文字列中のダブルクォートや改行の使い方

文字列の文字には特別な意味を持つ文字や通常通り使用できない文字があります。

ここでは、そのような文字の扱い方について解説します。

検証環境

特殊文字

特殊文字は文字列中で“特別な意味を持つ文字”や“通常通り使用できない文字”の総称です。

例えばダブルクォートは文字列の構文に含まれ、文字列の中で通常通り使えないため、特殊文字になります。

また、“改行”を意味する文字のようにそもそも文字として存在しないものも該当します。

特殊文字の例

ダブルクォートを例に理解を深めましょう。

次の実行結果になるソースコードを考えます。

$ php sample.php
これ→"はダブルクォートです。

この場合、最も単純なソースコードはechoキーワードを使った文字列の出力です。

<?php

___ih_hl_start
echo "これ→"はダブルクォートです。";
___ih_hl_end

?>

しかし、このソースコードは実行するとエラーが発生します。

$ php sample.php
PHP Parse error:  syntax error, unexpected identifier "はダブルクォートです。", expecting "," or ";" in sample.php on line 3

Parse error: syntax error, unexpected identifier "はダブルクォートです。", expecting "," or ";" in sample.php on line 3

これは不正な構文によるエラーです。

本来、"これ→"はダブルクォートです。"の最初のダブルクォートから最後のダブルクォートまでを文字列として扱いたいところですが、2個目のダブルクォートを文字列の終了と判定してしまうため、不正な構文なってしまいます。

このようにダブルクォートは文字列の構文に使用し、通常の文字として扱うことができないため特殊文字となります。

特殊文字を文字列で使用するにはエスケープシーケンスが必要です。

エスケープシーケンス

エスケープシーケンスは特殊文字を通常文字として表現する方法です。

バックスラッシュ(\)と文字を使って特殊文字を表現します。
※ Windowsの場合は円マーク(¥)をバックスラッシュの代わりに使うことがあります。

例えば、ダブルクォートのエスケープシーケンスは\"です。

<?php

___ih_hl_start
echo "これ→\"はダブルクォートです。";
___ih_hl_end

?>
$ php sample.php
これ→"はダブルクォートです。

2個目のダブルクォートはエスケープシーケンスのため、文字列の終了を意味するダブルクォートではなく、通常文字として扱われます。

そのため、正常にプログラムを実行することができます。

また、\"でダブルクォート(")の1文字を意味するため、バックスラッシュは出力されません。

特殊文字とエスケープシーケンス

代表的な特殊文字とそのエスケープシーケンスは次の通りです。

特殊文字 エスケープシーケンス
シングルクオート \'
ダブルクオート \"
改行 \n
タブ \t
括弧 \( / \) / \[ / \]

注意点

基本的にエスケープシーケンスはダブルクォートの文字列で使用します。

シングルクォートの文字列ではシングルクォートとダブルクォートのエスケープシーケンスしか使用できないので注意しましょう。

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 文字列はダブルクオートを使用
ダブルクオート "

問題2

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 文字列はダブルクオートを使用
ダブルクオート "
シングルクオート '