Daily Archives: 2011年10月21日

初心者による初心者のためのPHP講座 第3回 文字列

※「\」が「\」に見える場合は、別のPCからアクセスする事をお勧めする。この記事では、意図して「\」を使用しており、「\」と「\」の区別が出来たほうが分かりやすい。 「文字列」とは、文字を集まり、つまりは文字で書かれた単語や文の事を指し、単語、文の長さに関係なく、PHPで文字列を扱う際は、それが文字列である事を表す構文を使う必要がある。 「第2回 PHPの基本構造」でも、echo()関数の引数として文字列を用いている。 例えば「こんにちは」と表示させたい時は、echo()関数を用いて <?php echo “こんにちは”; ?> と命令文を書く必要がある。 「”こんにちは”」の部分が文字列であり、文字列を扱う場合は、文字列を「”」または「’」で囲む方法が良く用いられる。 このルールは、関数の引数として文字列を扱う場合だけでなく、変数に代入したり、条件式で用いる場合なども同様である。(変数と条件式は別の機会に説明する。) 引用符 「’」で文字列を囲む方法は、文字列の始まりと終わりを意味する「’」を文字列に直接書きこむ事が出来ない。 しかし、「’」の前に「\」または「\」を置き、「\’」または「\‘」とすることで、文字列内に「’」を書きこむことが出来る。 ※バックスラッシュ「\」は、多くの日本語フォントでは「\」と表示されるが、同じ意味であり、日本語キボード上でも「\」と表示されているが、入力は「\」で良い。 また、「\」または「\」も同様に直接記述することが出来ず、「\」または「\」を記述する場合は、「\\」または「\\」とする必要がある。 文字列に空白、改行が含まれる場合は、空白と改行は、そのまま文字列に反映される。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>引用符を使った文字列</title> </head> <body> <?php echo ‘\’こんにちは\’<br />’; echo ‘\\こんにちは\\’; ?> </body> </html> 上記のスクリプトの実行結果を表示 以上のような「\」または「\」を使った特殊な記述を「エスケープシーケンス」と言う。 エスケープシーケンスには、「\」または「\」を文字の前に置く以外に、特別なコードで置き換える方法もあり、構文やシステム都合のよる理由で、文字そのままでは不都合が生じる場合や文字で表現できない場合は、特別な文字や機能を特別なコードで置き換えたもの使用することがあり、これら全般をエスケープシーケンスと読んでいる。 ここで言うエスケープシーケンスは、狭義のものであるが、その他のエスケープシーケンスについては、別の機会に説明する。 また、特殊な文字や機能をエスケープシーケンスで置き換えることを「エスケープする」と言う。 なお、ここまでは、「\」と「\」の両方を表記してきたが、以後は「\」をもってエスケープシーケンスを意味し、エスケープされた文字を意味するものとする。 二重引用符 文字列は、「”」で囲む場合は、文字列内でも「’」の使用が許されるが「”」を使用する際は、「\”」とする必要がある。 また引用符「’」の場合と異なり、様々なエスケープシーケンスを文字列中に使用することが出来る。 \n ・・・ UNIX系の改行(LF)を意味する。 \r ・・・ 昔のMacなどの改行(CR)を意味するが、文字列中で改行させたい時は、通常は\nを使う。 \t ・・・ タブ(水平タブ)を意味でする。 \v ・・・ 垂直タブを意味する。PHP 5.2.5以降でサポート。 \f ・・・ フォームフィード(FF)。PHP 5.2.5以降でサポート。 \$ ・・・ ドル記号。 \\ ・・・ バックスラッシュ。 上記以外に(アスキー)文字の8進数表記を「\nnn」、16進数表記を「\xnn」と書くことも出来る。 ※nは、8進数の場合は、0から7の数字で、16進数の場合は、数字の0から9およびアルファベットのaからf。 「\n」での改行は、タグの「<br />」を意味しておらず、あくまでHTMLソース上の改行であるため、ブラウザ上で反映されるわけではない、効果を確認するためにはブラウザでソースを見ること。 例えば、PHPでHTMLタグを含む文字列を表示させる場合、「\n」を使って改行を入れるとソースも見やすくなる。 「\r\n」は「CRLF」、つまりWindowsなどの改行コードとなる。 インターネットプロトコルでは、意外にもUNIX系の「LF」でなく、DEC系の「CRLF」が使われてきた経緯もあり、改行コードとして「CRLF」が必要なケースもあり得るので、使う機会があるかもしれない。 ともかく、改行コードの扱いはシステムによって事なる場合があり、意外に曲者なので、記憶しておくとトラブルの際の助けになるかもしれない。 私の経験では、ダウンロードしたPHPのメールフォームで送信されたメールが、メーラーのよっては正常に表示されず、メールフォーム自体もインターネットの決まりごと(RFC)を順守したものだったが、決まりを順守しない方向に改行コードを変更したら、問題が解消した経験がある。 エスケープシーケンス以外の特徴として、文字列内に変数を直接記述し、変数を使用することが許される。(文字列内で変数が展開される。) 変数の直後に文字が続く場合は、変数の終わりが判断できなくなるため、「{$text}」のように「{}」で囲むと良い。 ちなみに、関数を「{}」で囲むことで、文字列内に関数の戻り値を展開することも出来るのだが、本来、仕様にない事かもしれないので、使わない方が良いかもしれない。 文字列に空白、改行が含まれる場合は、空白と改行は、そのまま文字列に反映される。 以下のサンプルでは「変数」を使用しているが、変数については別の機会に説明する。 <!doctype html> <?php echo ‘<?xml version=”1.0″ encoding=”utf-8″?>’; ?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”> <head> <meta http-equiv=”Content-Type” … 続きを読む →

Posted in PHP, PHP講座, ネット・PC | Tagged | 2 Comments