2012/04/06

Tag : ,

文字列の操作。検索、置換、分割など。

strlen() :文字列の長さ

strlen("abc123あいう"); //結果:12じゃなく、15になってる。。。

半角を1バイト、全角を2バイトだから、結果は「12」ですかね。。。。って思ったら、「15」になるという謎。んで、調べたら、「文字コードとしてUTF-8を使っている場合、日本語の文字は1~6バイトのデータとして定義されている。よって、strlenで日本語の文字のバイト数を数えると、1~6バイトという答えが返ってくる。」だそうです。ほかのエンコードでもなにやら怪しいですね。なので下記のように一回エンコードを変えてやらないと目的の数値を得られない模様。

strlen(mb_convert_encoding("abc123あいう","SJIS","UTF-8")); //結果:12

上記の場合、「UTF-8」を「SJIS」に変換して長さを数えています。

mb_strlen() :日本語文字列の長さ(マルチバイト関数)

要は、1文字は1として計算します。ってこと??

mb_strlen("abc123あいう"); //結果:9

explode() :文字列を分割

第一引数で指定した文字で、第二引数を区切り、配列に格納します。

print_r( explode("、","ひとつ、ふたつ、みっつ") );
//結果
/*Array
(
[0] => ひとつ
[1] => ふたつ
[2] => みっつ
)*/

substr() :文字列の一部分を取り出す。
mb_substr() :日本語文字列の一部分を取り出す。

文字列から指定したバイト分の文字列を取得します。

$str = "sample text";
substr($str,4); // le text(先頭の4文字以降)
substr($str,4,2); // le(先頭4文字以降の2文字)
substr($str,-4,4); // text(末尾4文字の位置から4文字)

addslashes() :文字列をスラッシュでクォートする。

クォートされるべき文字の前にバックスラッシュを挿入した文字列を返します。クォートされるべき文字とは、シングルクォート(‘), ダブルクォート(“),バックスラッシュ (\) ,NUL (NULL バイト) です。データベースにデータを登録するときにaddslashes()を使用しないとまずいっぽいですね。

$str = "この\"サンプル\"は、100\$です。";
echo $str; // 結果:この”サンプル”は、100$です。
echo addslashes($str); // 結果:この\”サンプル\”は、100$です。

補足:上記は「この”サンプル”は、100$です。」という文字列なのですが、そのままダブルクォーテーションで囲うと「”この”サンプル”は、100$です。”」になり、マズいですよね。そこで、バックスラッシュ記法というものが使われています。文字として判断してほしい文字の前にバックスラッシュ(\もしくは¥)を記述するだけです。「”」は「\”」、「$」は「\$」のようにします。他にも改行やタブなど特殊文字の記述なんかもこの方法でかけちゃいます。
そもそも囲うものを、ダブルからシングルにする方法もありますが、ダブルとシングルでは中身の仕様がすこし変わってくるみたいですので注意が必要ですね。詳しくはこちらを参考にどうぞ。

Leave a Reply

Back to Top