FC2ブログ

PHPでマルチバイト文字列を1文字ずつ配列に分割する

PHPでマルチバイト文字列を1文字ずつ配列に分割しようと思ったのですが、
str_split()という関数は、マルチバイトに対応していないです。
そこで調べてみるとmb_substr()を使って地道に分割する方法がありました。

function mbstr_split($str, $enc='UTF-8') {
$res = array();
while ($iLen = mb_strlen($str, $enc)) {
array_push($res, mb_substr($str, 0, 1, $enc));
$str = mb_substr($str, 1, $iLen, $enc);
}
return $res;
}

こんな感じになります。
以下のようにstr_split()と比較して実行してみると

$test = 'これはテストの文字列です。This is test string. アッチへ━━━━⊂(゚Д゚⊂⌒`つ≡≡';
$res1 = str_split($test);
print_r($res1);

$enc = mb_detect_encoding($test, 'ASCII,JIS,UTF-8,EUC-JP,SJIS');
$res2 = mbstr_split($test, $enc);

print_r($res2);


このような結果になります。

$ php mbsplit.php
Array
(
[0] =>
] =>
2] =>
3] =>
] =>
5] =>
6] =>
] =>
8] =>
9] =>
0] =>
11] =>
12] =>
3] =>
14] =>
15] =>
6] =>
17] =>
18] =>
9] =>
20] =>
21] =>
2] =>
23] =>
24] =>
5] =>
26] =>
27] =>
8] =>
29] =>
30] =>
1] =>
32] =>
33] =>
4] =>
35] =>
36] =>
7] =>
38] =>
39] => T
[40] => h
[41] => i
[42] => s
[43] =>
[44] => i
[45] => s
[46] =>
[47] => t
[48] => e
[49] => s
[50] => t
[51] =>
[52] => s
[53] => t
[54] => r
[55] => i
[56] => n
[57] => g
[58] => .
[59] =>
[60] =>
1] =>
62] =>
63] =>
4] =>
65] =>
66] =>
7] =>
68] =>
69] =>
0] =>
71] =>
72] =>
3] =>
74] =>
75] =>
6] =>
77] =>
78] =>
9] =>
80] =>
81] =>
2] =>
83] =>
84] =>
5] =>
86] =>
87] => (
[88] =>
9] =>
90] =>
91] =>
92] =>
93] =>
4] =>
95] =>
96] =>
7] =>
98] =>
99] =>
00] =>
101] =>
102] =>
03] =>
104] =>
105] =>
06] =>
107] =>
108] =>
09] =>
110] =>
111] =>
12] =>
113] =>

Array
(
[0] => こ
[1] => れ
[2] => は
[3] => テ
[4] => ス
[5] => ト
[6] => の
[7] => 文
[8] => 字
[9] => 列
[10] => で
[11] => す
[12] => 。
[13] => T
[14] => h
[15] => i
[16] => s
[17] =>
[18] => i
[19] => s
[20] =>
[21] => t
[22] => e
[23] => s
[24] => t
[25] =>
[26] => s
[27] => t
[28] => r
[29] => i
[30] => n
[31] => g
[32] => .
[33] =>
[34] => ア
[35] => ッ
[36] => チ
[37] => へ
[38] => ━
[39] => ━
[40] => ━
[41] => ━
[42] => ⊂
[43] => (
[44] => ゚
[45] => Д
[46] => ゚
[47] => ⊂
[48] => ⌒
[49] => `
[50] => つ
[51] => ≡
[52] => ≡
)


str_split()はみごとに使えてないですね。
それに比べてmbstr_split()はうまくいってます。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR