PHP学習コラム第7回「ぺち子の目指せPHP初級試験合格!」『テキストの操作(2)』
こんばんは。PHP技術者認定機構の吉政でございます。当機構のパートナーであるテンプスタッフ・テクノロジー社が表記のテクニカルコラムを連載いただいています。最新の7号は以下の通りです。過去のバックナンバーはこの文章の最下段に記載されています。全て読むとPHP技術者認定初級試験全体を網羅するような感じで連載されています。
興味がある方は、是非お読みください。
PHP学習コラム第7回「ぺち子の目指せPHP初級試験合格!」『テキストの操作(2)』
こんにちは~、ぺち子です!
前回はテキストの操作のお話でした。
今回は次の話題に行こうと思ったのですが、他にも便利なテキスト操作関数がいろいろあるので、ついでに紹介しましょう!
ということで、「テキストの操作(2)」です。
PHPマニュアルへのリンクを貼っているので、使い方はそちらで確認してください。
「注意」のところが重要だったり、「参考」で他の素敵な関数に出会ったりしますよ。
では、グローバル開発でも考慮して、まずはアルファベットの文字列操作をしてみます(笑)。
Webシステムのユーザー登録で、ある人に名前を入力してもらいました。
その人の名前は「John」と言いますが、勢い余って「JOHN」と入力したようです。
トップ画面であいさつを表示するときにこのまま使うと「Hello, JOHN!」となり、ちょっと名前が強調されすぎですね。
「JOHN」を「John」に変更するのに必要な手順は以下の通りです。
1. 「JOHN」を「john」に変更する
2. 「john」を「John」に変更する
■ すべての文字を小文字にするには、strtolower() を使います。
[PHPマニュアル:strtolower]
http://jp2.php.net/manual/ja/function.strtolower.php
関数名は「string to lower(文字列を小文字に)」の略ですね。
もちろん、全ての文字を大文字にする関数も別にあります。
■ 最初の文字だけを大文字にするには、ucfirst() を使います。
[PHPマニュアル:ucfirst]
http://jp2.php.net/manual/ja/function.ucfirst.php
こちらは「uppercase first」の略ですね。
これらを組み合わせた実際のコードはこんな感じになります。
------------------------------------------------------------
<?php
// 名前を取得(本来はWebから入力される)
$name_input = 'JOHN';
// 小文字化
$name_low = strtolower($name_input);
// 最初の文字だけ大文字化
$name = ucfirst($name_low);
// 出力
print 'Hello, ' . $name . '!';
?>
------------------------------------------------------------
ちなみに省略して書くとこうなります。
------------------------------------------------------------
<?php
// 名前を取得(本来はWebから入力される)
$name_input = 'JOHN';
// 出力
print 'Hello, ' . ucfirst(strtolower($name_input)) . '!'; // Hello John!
?>
------------------------------------------------------------
次の人は、自分の名前を「_____Peter_____」と入力しました。
(「_」は半角スペースのつもり)
この半角スペースを削除してきれいにしましょう。
■ 前後のホワイトスペースを取り除くには、trim() を使います。
[PHPマニュアル:trim]
http://php.net/manual/ja/function.trim.php
日本語の「 (全角スペース)」はホワイトスペースではないので対象外です。
左だけ、右だけのホワイトスペースを除去する、ltrim()、rtrim() もあります。
------------------------------------------------------------
<?php
// 名前を取得
$name_input = '_____Peter_____'; // _は半角スペースのつもり
// 出力
print 'Hello, ' . trim($name_input) . '!'; // Hello Peter!
?>
------------------------------------------------------------
次の例に行きましょう。
ユーザー名に続き、電話番号を入力してもらいました。
「※ハイフンは不要です」と注釈したにもかかわらず、ハイフンをつけられることはよくあります。
余分なハイフンを除外したいと思います。
■ 文字列を置換するには、str_replace() を使います。
[PHPマニュアル:str_replace]
http://jp2.php.net/manual/ja/function.str-replace.php
------------------------------------------------------------
<?php
// 電話番号を取得
$phone_input = '0123-456-789';
// 「-」を消して出力
print str_replace('-', '', $phone_input); // 0123456789
?>
------------------------------------------------------------
次は住所を入力してもらいました。
あんまり長いとハガキに書ききれないので、100文字以内に収めてもらいましょう。
何文字で入力されたか調べてみます。
■ 文字列の長さを調べるには、strlen() を使います。
[PHPマニュアル:substr]
http://jp.php.net/manual/ja/function.strlen.php
日本語が混ざっているときはマルチバイト版(mb_strlen)を使います。
------------------------------------------------------------
<?php
// 住所を取得
$address_input = 'King St. 123 ...略...';
// 文字数をカウント
$length = strlen($address_input); // 35とか
?>
------------------------------------------------------------
住所は長いので、テキストエリア(textareaタグ)で入力してもらうことが多いですよね。
そうすると、住所の区切りに改行が入っていることもあります。
そのまま出力すると、改行は改行として出力されますが、HTMLファイルに出力した場合、あくまでHTMLソース上の改行になり、画面には改行が反映されません。
画面上で改行するには、改行タグ(br)が必要です。
そういうときはこの関数を使います。
■ 改行文字のところにBRタグを挿入するには、nl2br() を使います。
[PHPマニュアル:substr]
http://jp.php.net/manual/ja/function.nl2br.php
「\n」以外の改行文字も対照です。
------------------------------------------------------------
<?php
// 住所を取得
$address_input = '東京都練馬区月見台\nすすきヶ原3-10-5';
// 出力
print nl2br($address_input); // 東京都練馬区月見台<br>\nすすきヶ原3-10-5
?>
------------------------------------------------------------
次の例です。
ユーザーに顔写真をアップロードしてもらいました。
このファイルの拡張子を見て、ファイルの形式を調べたいと思います。
(「xxxxx.txt」とか、「xxxxx.pdf」だったらエラーにしたいですよね。)
■ 文字列を抜き出すには、substr() を使います。
[PHPマニュアル:substr]
http://jp2.php.net/manual/ja/function.substr.php
------------------------------------------------------------
<?php
// ファイル名を取得
$file_input = 'picture.jpg';
// 拡張子(後ろから3文字)を取得
$ext = substr($file_input, -3); // jpg
?>
------------------------------------------------------------
「jpeg」は4文字じゃないか…どうするんだ、と思いましたか。
では、「.」から後ろの文字を抜き出すことにしましょう。
そのためには、まず「.」の位置を探します。
■ ある文字列が最初に現れる場所を探すには、strpos() を使います。
[PHPマニュアル:strpos]
http://jp2.php.net/manual/ja/function.strpos.php
これは「string position」の略でしょうね~。
ただし、今回はこれは使えません。
「my.picture.2012.jpg」というように、拡張子以外の場所にも「.」が入っているかもしれませんので。
■ ある文字列が最後に現れる場所を探すには、strrpos() を使います。
[PHPマニュアル:strrpos]
http://jp2.php.net/manual/ja/function.strrpos.php
------------------------------------------------------------
<?php
// ファイル名を取得
$file_input = 'picture.jpg';
// 「.」の位置を取得
$dot_pos = strrpos($file_input, '.'); // 7
// 「.」があれば
if($dot_pos !== false) {
// 拡張子を取得
$ext = substr($file_input, $dot_pos + 1); // jpg
}
?>
------------------------------------------------------------
最後に、簡単な自己紹介を入力してもらいました。
「よろしく(>∀<)」なんて、顔文字を使う人もきっといますよね。
(「>」と「<」は半角のつもりです。)
PHPは出力にHTMLを使うことが多いですが、これをそのまま出力してしまうと、「>」と「<」がHTMLタグの一部だと解釈されて、うまく表示することができません。
HTMLでは「>」や「<」と書かないといけないですよね。
■ 特殊文字を HTML エンティティに変換するには、htmlspecialchars() を使います。
[PHPマニュアル:htmlspecialchars]
http://jp2.php.net/manual/ja/function.htmlspecialchars.php
これはオプションがたくさんあるので、マニュアルで確認してください。
「>」を「>」に戻すための、htmlspecialchars_decode() もあります。
はい。
そんな感じで、テキスト操作(2)は以上です!
よく使う関数ばかりなので、覚えておくといいと思います。
PHPは、関数の引数の順序に規則性がなかったりするので、オンラインのPHPマニュアルにはよくお世話になると思いますよ(笑)。
それではまた~。
************************************************************
「ぺち子の目指せPHP初級試験合格!」PHP学習コラム目次
第1回 「info.phpを作成し、ブラウザで表示させる おまけ:GUNDAM」
第2回 「開始タグと終了タグの適切な書き方」
第3回 「ホワイトスペースと大文字小文字の使い方」
第4回 「ダブル&シングルクォートと、ヒアドキュメントの使いどころ」
第5回 「変数の命名方法」
第6回 「テキストの操作」