strtok関数を使って文字列 "サッカー スポーツ"
を " "(全角空白) で分割しようとすると、
次のように分割されます。
array(4) {
[0]=>
string(6) "サッカ"
[1]=>
string(1) "["
[2]=>
string(4) "スポ"
[3]=>
string(4) "[ツ
"
}
伸ばし棒 "ー" がはいっていなければ、普通に分割できるのですが、
何か、対策、もしくは原因について心当たりのあるかた教えていただけないでしょうか。
strtok は第二引数に含まれている文字の
”いずれかに該当”すれば分割点だと解釈しますので
例えば "ab" と与えれば"a"か"b"いずれかで分割します。
そして問題となるのが strtok がマルチバイト非対応という点です。
全角スペースはマルチバイトですからスペース1文字のつもりが
内部的には複数の文字で構成されているため、それぞれの構成文字が
分割対象とされ、結果として思い通りの分割は行ってくれません。
mb_split などのマルチバイトに対応した関数を利用してください。
strtok は第二引数に含まれている文字の
”いずれかに該当”すれば分割点だと解釈しますので
例えば "ab" と与えれば"a"か"b"いずれかで分割します。
そして問題となるのが strtok がマルチバイト非対応という点です。
全角スペースはマルチバイトですからスペース1文字のつもりが
内部的には複数の文字で構成されているため、それぞれの構成文字が
分割対象とされ、結果として思い通りの分割は行ってくれません。
mb_split などのマルチバイトに対応した関数を利用してください。
助かりました!ありがとうございます。
strtok関数ではマルチバイト文字列を取り扱えません。
たとえば、mb_split関数なら下のように使えます。
$string = "サッカー スポーツ";
$a = mb_split("[ ]", $string);
print_r($a);
// Array ( [0] => サッカー [1] => スポーツ )
助かりました!ありがとうございます。
助かりました!ありがとうございます。