人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのstrtok関数について質問です。
strtok関数を使って文字列 "サッカー スポーツ"
を " "(全角空白) で分割しようとすると、
次のように分割されます。

array(4) {
[0]=>
string(6) "サッカ"
[1]=>
string(1) "["
[2]=>
string(4) "スポ"
[3]=>
string(4) "[ツ
"
}

伸ばし棒 "ー" がはいっていなければ、普通に分割できるのですが、
何か、対策、もしくは原因について心当たりのあるかた教えていただけないでしょうか。

●質問者: shotaroh5663
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP String サッカー スポーツ 文字列
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●35ポイント ベストアンサー

strtok は第二引数に含まれている文字の

”いずれかに該当”すれば分割点だと解釈しますので

例えば "ab" と与えれば"a"か"b"いずれかで分割します。


そして問題となるのが strtok がマルチバイト非対応という点です。

全角スペースはマルチバイトですからスペース1文字のつもりが

内部的には複数の文字で構成されているため、それぞれの構成文字が

分割対象とされ、結果として思い通りの分割は行ってくれません。


mb_split などのマルチバイトに対応した関数を利用してください。

◎質問者からの返答

助かりました!ありがとうございます。


2 ● palo
●35ポイント

strtok関数ではマルチバイト文字列を取り扱えません。

たとえば、mb_split関数なら下のように使えます。

$string = "サッカー スポーツ";

$a = mb_split("[ ]", $string);

print_r($a);

// Array ( [0] => サッカー [1] => スポーツ )

PHP: mb_split - Manual

◎質問者からの返答

助かりました!ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ