PHPでよく使う文字列操作関数

サイトを作るときによく使う文字列操作のPHP関数まとめ 文字列操作PHP関数

 

サイトを作るときに毎度調べて面倒くさい気持ちになる関数。
問合せフォームなどユーザーが書き込む場合がある部分には必須の文字列操作。

例えば、半角英数字を全角に直したり、改行を削除したりなどなど・・・
毎度、調べていて利用頻度が高いものをまとめて自分用としよう!

初歩的な部分までとりあえず網羅しているので参考にどうぞぉ!

 

文字の出力 echo & print

文字の出力には2つ方法がある。

echo "出力したい文字";
print "出力したい文字";

必須です。関数では無いですが文字をブラウザに出力する場合に必要。
「echo」と「print」の違いは厳密に言えばありますが、知らなくても困ったことはありませんw

echo ならできること

/*カンマで区切って文字を出力出来る・printは出来ない(エラーが出る)*/
echo "文字1" , "文字2";

シングルクォーテーションとダブルクォーテーションの違いは重要

"ダブルクォーテーションは、特殊文字も使えるし変数展開も可能";
'シングルクォーテーションは、特殊文字も変数も文字列としてそのまま表示';

ダブルクォーテーションでくくると、変数を展開・「\n」などの特殊文字を利用可能
シングルクォーテーションは入力したままが表示されます。

$str = "晴れ";
echo "今日の天気は、$strです。";
/*出力結果:今日の天気は、晴れです。*/

ただ、ソースを見返すと文字列に変数があると気持ち悪い気がする。何が正しい変数化を見誤ることもあるので、私はシングルクォーテーションを使って文字列連結の「 . 」で対応します。

.を利用して文字列と変数をつなげる

$str = "晴れ";
echo '今日の天気は、' . $str . 'です。';
/*出力結果:今日の天気は、晴れです。*/

この表記だと、「これは変数展開してるんだ!」と直感的に理解でき、見落としもなくなります。
それにリンクタグなどを含ませた場合、リンクタグにダブルクォーテーションが出てくるため表記エラーが出ます。
シングルクォーテーション派の私ならではのワガママです(`・ω・´)ゞ

指定の文字列を置換える str_replace()

出力する文字列に改行(<br />”)などがあると不都合な場合ありますよね?
そんな時に活躍する関数です。

echo str_replace( "<br />", "", "ぷろめしに<br />「いいね!」をして欲しい" );
/*出力結果:ぷろめしに「いいね!」をして欲しい*/

上記の場合、「ぷろめしに「いいね!」をして欲しい」となり<br />”が削除される。

文字のかな変換をする mb_convert_kana()

お問合せフォームなどユーザーが入力する値を処理する場合、全角や半角が混在している場合があり不都合が発生する。
mb_convert_kana()関数を使って文字を統一すると良い。

$str = mb_convert_kana( "アイウエオ123456789", "ak", 'utf-8' );
echo "$str"; 
/*出力結果:アイウエオ123456789*/

カタカナと英数字を全角から半角に変換しています。
複数の変換を一括で出来るので簡単です。覚えていて損はありません。

その他、沢山の変換に対応しています。

r - 「全角」英字を「半角」に変換。
R - 「半角」英字を「全角」に変換。
n - 「全角」数字を「半角」に変換。
N - 「半角」数字を「全角」に変換。
a - 「全角」英数字を「半角」に変換。
A - 「半角」英数字を「全角」に変換。
s - 「全角」スペースを「半角」に変換。
S - 「半角」スペースを「全角」に変換。
k - 「全角カタカナ」を「半角カタカナ」に変換。
K - 「半角カタカナ」を「全角カタカナ」に変換。
h - 「全角ひらがな」を「半角カタカナ」に変換。
H - 「半角カタカナ」を「全角ひらがな」に変換。
c - 「全角カタカナ」を「全角ひらがな」に変換。
C - 「全角ひらがな」を「全角カタカナ」に変換。
V - 濁点付きの文字を一文字に変換します。”K”, “H” と共に使用。

ユーザーに全角入力を強制させてエラーを出す方法もあるけれど
自動で変換した方がスマートですね!

数字を0(ゼロ)埋めする

日付などの処理に0埋めは役立ちます。

/*左に0を埋めます*/
echo str_pad("1", 2, "0", STR_PAD_LEFT);/*01*/
/*右に0を埋めます*/
echo str_pad("1", 2, "0", STR_PAD_RIGHT);/*10*/

ループで日付を表示すると普通は、0,1,2・・・となりますが、
ゼロ埋めの関数を使うと01や02などで表示することが出来ます!便利!

タグを無効化するエンティティ処理 htmlspecialchars

フォームでデータを送る場合、タグを有効化していると思わぬ事態を招きます。
DBなどを利用しているとsql文をフォームで送られて個人情報を流出させる・・・など悪用される可能性があるのです。

そんな時に活躍するのが、タグを無効化するhtmlspecialcharsです。

htmlspecialchars("<a href="test">Test</a>" , ENT_QUOTES);
/*出力結果:<a href='test'>Test</a>*/

タグが無効化され意味をなさなくなります。これで不測の事態を多少なりとも防ぐことが可能となりますよ。

フラグの種類・一例
ENT_COMPAT - ダブルクオートは変換しますがシングルクオートは変換しません。
ENT_QUOTES - シングルクオートとダブルクオートを共に変換します。
ENT_NOQUOTES - シングルクオートとダブルクオートは共に変換されません。

特にオリジナルでDBを使ったサービスを展開する場合は注意した方がいいです。
SQLインジェックション攻撃という方法があり・・・やり方は控えますが乗っ取りも可能です。

いらない空白は削除してあげる trim()

文字の最初や最後にスペースがあると気持ち悪いし不都合もあるかもしれません。
自動で前後の空白を削除する簡単な関数。

echo trim( " 最初に半角スペース最後に全角スペース " );
/*出力結果:最初に半角スペース最後に全角スペース */
/*半角スペースは削除できるが、全角スペースは削除できない*/

ltrimとrtrimという関数もあり右端・左端だけスペースを取る…らしいです。
何がダメなのかわからないですが、私の環境だと挙動がおかしいので説明を省きます。

全角もしっかり削除したい場合は、mb_convert_kana()と組み合わせて削除しよう!
当然、文中の全角スペースも半角になりますが、文中のスペースは削除されません。

文字数をカウントする mb_strlen()

$str = mb_strlen( "文字数のカウントをするYO!" , "utf-8" );
/*出力結果:14*/

文字コードを設定せずに実行すると結果がおかしくなります文字コードの設定は必須です。

指定文字数だけ取り出す mb_substr()

商品一覧ページの説明やページの概要説明など全文表示ではなく、文字数を制限したい部分があると思います。そんな時に活躍するのが、mb_substr()です。

echo mb_substr( "1234567890", 0, 6, "UTF-8" );
/*出力結果:123456*/

大事なのは、文字コード。正しく設定できないと返り値がことなり意図しない文字数を返します。
例えば、上記の文字コードUTF-8を削除して動かすと「123」と返ってきます。

 

指定文字を置換えてやる

指定の文字を置換える方法です。

echo preg_replace('/ん/', 'わっ', "ふんふんふん");
/*出力結果:ふわっふわっふわっ*/

同じ動きをする関数がありますがphp6で無くなるので注意です。
phpのeregでDeprecatedエラーが出てるから調べてみたら使えなくなるという非常事態が発生

ざっと書き出しました。
一般的なサイトを作るのであれば、文字列操作はこれを覚えてたら大概大丈夫なような気がします。

参考になれば幸いです(`・ω・´)ゞ

投稿日: 2012/03/21
最終更新日: 2019/02/08
 
筆者のご紹介
角政典@moreiic
真性のお家大好きフリーランスです。プログラムよりご飯の方が断然好き!博多出身のデブデザイナー。インドアだけど遊んでくれる人募集中!
よく検索されてる記事