文字列(丸数字)の文字化けについて
今自分で関数を作成しているのですが、文字列(丸数字)の文字化けにかなり苦しんでいます。
(※注※)これ以降(1)など()の中に数字を入れて記述しているものは実際のソースコード上では丸数字で記入してます。教えてgooでは丸数字が記述できないようでして…
関数の内容としては、(1)あ(2)い(3)う……このように丸数字で区切られている文字列を配列名を$dataとすると、$data[0]には「あ」、$data[1]には「い」、$data[2]には「う」が入るような関数を作成しています。
この丸数字の数は(10)まで対応させようと考えてます。
実際のソースは
function bunkai($str1){
if (strstr($str1, "(10)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"); // 区切り文字
}else if (strstr($str1, "(9)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)(9)"); // 区切り文字
}else if (strstr($str1, "(8)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)"); // 区切り文字
}else if (strstr($str1, "(7)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)(6)(7)"); // 区切り文字
}else if (strstr($str1, "(6)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)(6)"); // 区切り文字
}else if (strstr($str1, "(5)") != NULL){
define("kugiri","(1)(2)(3)(4)(5)"); // 区切り文字
}else if (strstr($str1, "(4)") != NULL){
define("kugiri","(1)(2)(3)(4)"); // 区切り文字
}else if (strstr($str1, "(3)") != NULL){
define("kugiri","(1)(2)(3)"); // 区切り文字
}else if (strstr($str1, "(2)") != NULL){
define("kugiri","(1)(2)"); // 区切り文字
}else if (strstr($str1, "(1)") != NULL){
define("kugiri","(1)"); // 区切り文字
}
$count = 0;
$token = strtok($str1, kugiri);
while ($token) {
$data[$count] = $token;
$token = strtok(kugiri);
$count++;
}
$data[$count] = NULL;
return $data;
}
なんですが、
$str1に"(3)した(名)(4)しも(名)(5)もと(名)(6)さ-げる(動ガ下一)(7)さ-がる(動ガ下一)(8)くだ-る(動ラ五[四])(9)くだ-す(動サ五[四])(10)くだ-さる(動ラ五[四])"という文字列を入れて
$dataを表示させてみると
$data[0]=した(名)
$data[1]=しも(名)
ここまではできるのですが、これ以降
$data[2]=も�
$data[3]=(名)
$data[4]=さ-げる(動ガ下一)
$data[5]=さ-がる(動ガ下一)
$data[6]=く�
$data[7]=-る(動�
:
:
となってしまい、ところどころでうまく丸数字を読み込めていません。特に$str1に違う文字列をいれてみても(1)(2)(3)(4)まではきちんと読み込めてその後の(5)でまず最初の文字化けが絶対発生してしまいます。でも(5)を通過したあとの(6)(7)はきちんと判別していたりとよく原因がわかりません……。
がんばってexplode関数で同じようなことしてもいいかなと考えているのですが、関数自体が長くなってしまうので、めんどくさいなーと思います。
どなたか、このバグの原因がわかるかた、または、こんな関数を使ってこんなことしたら丸数字を判別して配列に入れることができるよーという意見もあったら欲しいです。
お願いします。困ってます。