Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
PHP
入門編
- トップページ
- PHP入門編 - エスケープシーケンスとは
エスケープシーケンスとは
みなさまどうもおはようございます。
続きまして前回の文字列の項目でちょいちょいでてきた『エスケープ文字』をやっていきましょう。これはPHPに限らず様々言語で組み込まれている仕様というか概念というか、まあそんな感じのかわいいやつです。
とりあえず「『エスケープ文字』とはなんぞや?」ってことなんですが、『エスケープ文字』とは通常の文字列で表記できない文字や記号を特別な文字の並びで表現することを指します。
どういう事かというと、例えば『ラインフィード』(改行文字)について考えてみましょう。改行するにはエンターキーを押せばOKですね。以下のような感じです。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo "あい うえお"; ?> </body> </html>
これを処理させると以下のテキストファイルが返ってきます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> あい うえお</body> </html>
バシッと改行されていますね。しかしちょっとPHPの部分に注目してみましょう。以下の部分です。
<?php echo "あい うえお"; ?>
文字列の中で改行されています。これでもOKなんですが、単純な処理が複数行のまたがってしまっているため、プログラムコード的にちょっと美しくない感じがしてしまうかもしれません。あと他の言語では文字列の中で改行させるのはNGだったりすることもありますので、そう考えるとあんまりよろしくない記述になってしまっていそうな気配です。
そんな悩めるプログラマーさんは『エスケープ文字』を使ってみましょう。前回『\n』が出てきましたね。これが改行文字になります。先ほどの処理は以下のように書き換えることができます。あ、『'』ではなく『"』を使って記述してくださいね。『'』だと『\n』がそのまま出力されちゃいます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo "あい\nうえお"; ?> </body> </html>
さて、これを処理させてみると以下のようになります。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> あい うえお</body> </html>
はい、先ほどと同じ結果となりました。このように改行をさせたい場合は『エスケープ文字』を使用するのがスマートです。
HTML的に改行させたかったら『<br>』とかをそのまま出力させちゃえばOKです。以下の様な感じですね。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo "あい<br>うえお"; ?> </body> </html>
これもよく使われる手法なので覚えておきましょう。
『エスケープ文字』は『改行文字』の他にも『タブ文字』など様々な種類がありますので、特殊な文字を出力させたい場合はgoogle先生とかに聞いてみると良いかもしれません。以下にPHPの公式リファレンス様のページを紹介しておきますのでちょっと困ったら以下のサイトなんかを参照してみてください。
http://php.net/manual/ja/regexp.reference.escape.php
「これって特殊文字になるのかなぁ」と不安になったら上記のサイト様に載っていないものは特殊文字にならないのでそういう使い方をするのもグッドです。
さて、ここでちょいと注意点でございますが、『エスケープ文字』とかでよく使われる『\』(バックスラッシュ)という記号があります。これは『エスケープシーケンス』とか呼ばれたりしますが、これの入力が少々ややこしいのです。
MacOSの方は『option』+『¥』でそのまま入力することができますが(JISキーボードの場合)問題はWindowsOSの方です。
WindowsOSでは『¥』を押せばバックスラッシュが入力できますが、フォントの都合でバックスラッシュが円記号の『¥』マークで表示されちゃうという大変紛らわしい仕様になっています。要するに『¥』と表示されてはいるものの中身はちゃんとバックスラッシュになっているということです。恐らくこのウェブサイトを見ているWindowsOSユーザーの方はすでに円マークとして表示されてしまって訳がわからない感じになってしまっているかと思います。大変心苦しいのですがWindowsOS使いの方の宿命でございますので、慣れてしまってください。
では改めまして『エスケープシーケンス』(バックスラッシュ)の他の使い方を紹介したいと思います。『エスケープシーケンス』には続く文字を『エスケープ』することができるという超便利な機能を備えています。
ちょっとこれまで紹介した文法を思い出してみましょう。プログラム言語においての文法上の注意点として『'』を『'』でくくることはできません。同じく『"』を『"』でくくることはできません。特にPHPではHTML要素の書き出し処理を行うことが多いのでこういう機会に遭遇するパターンがめちゃめちゃあります。
例えば『<p class="hoge">ここはhogeってクラス名がついたp要素だよ!</p>』という文字列をみてみましょう。よくあるHTML要素の記述になりますが、記述の中に『"』がありますね。『'』ではなく『"』でくくって文字列を表記したい場合、上記のHTML要素をそのまま記述すると文字列をくくっている『"』とHTML要素の属性の記述で使っている『"』がコンピューターには区別されず、『"』で囲まれていないと判断されエラーとなります。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo "<p class="hoge">ここはhogeってクラス名がついたp要素だよ!</p>"; ?> </body> </html>
上記のサンプルは動きません。ページが真っ白になっちゃいます。
この問題の手っ取り早い解決法方法として、文字のくくりを『"』ではなく『'』の方でくくってしまえば解決することができます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo '<p class="hoge">ここはhogeってクラス名がついたp要素だよ!</p>'; ?> </body> </html>
これはバッチリ動きます。文字列中に『"』が使用されていた場合は逆に『'』でくくればOKです。これはよく使用される手法なので覚えておきましょう。他のプログラム言語でも同じような感じでOKでございます。
そして『エスケープシーケンス』を使用すればまた違った方法で解決することができます。以下の記述をみてください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPテスト</title> </head> <body> <?php echo "<p class=\"hoge\">ここはhogeってクラス名がついたp要素だよ!</p>"; ?> </body> </html>
『"』の手前に『\』がありますよね。このような感じで『\"』と記述すれば『"』はエスケープされますので『"』の持っている「文字列にする」という機能が消えて単純な文字の扱いになり、『"』でくくることができるようになります。『'』ならば『\'』と入力すればOKです。これが『エスケープシーケンス』の便利な機能になります。これは良く使用されるのでバッチリ覚えてしまって下さい。ちなみに『\』を入力したい場合は『\\』と入力すればOKです。
というわけで『エスケープ文字』とか『エスケープシーケンス』とかはこんな感じになりますね。続いての記事ではPHPにおいての文字列とかもろもろを出力する方法などを確認していきたいと思います。
ではではこの辺で失礼致します。またお会いしましょう。
この記事は桜舞が執筆致しました。
著者が愛する小型哺乳類 |
桜舞 春人 Sakurama HarutoISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。 |
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。