文字列分割方法 | マルチバイト・シングルバイト複合文字列を文字数により4分割する方法

このQ&Aのポイント
  • フォームから入力されたデーターを文字数により4分割したい場合、マルチバイト・シングルバイト文字列が混在していると、文字化けが起こってしまいます。簡単な方法として、シングルバイト文字数をカウントして4分割することができますが、マルチバイト文字列を含む場合は文字化けが起こる可能性があります。
  • 一つの解決策として、文字列をUnicodeの文字ごとに分割し、シングルバイト・マルチバイトを考慮した分割ができます。具体的には、mb_split関数を使用して、Unicodeの文字ごとに配列に分割することができます。
  • 別の方法として、正規表現を使用してマルチバイト文字を考慮した分割ができます。具体的には、preg_split関数を使用して正規表現パターンによる分割を行います。ただし、正規表現パターンを適切に設定する必要があります。
回答を見る
  • ベストアンサー

文字列分割方法

フォームから入力されたデーターを文字数により4分割したい場合、 シングルバイトとマルチバイト文字列が混在していると、文字化けが起こってしまいます。 私が考えた方法は <?php $test="あああああいいいいいうううううえええええ"; $length = strlen($test); $length2 = (int)$length/4 $quarter[] = substr($test,0,$length2); $quarter[] = substr($test,$length2,$length2); $quarter[] = substr($test,$length2*2,$length2); $quarter[] = substr($test,$length2*3,$length2); echo $quarter[0]."<BR><BR>"; echo $quarter[1]."<BR><BR>"; echo $quarter[2]."<BR><BR>"; echo $quarter[3]."<BR><BR>"; ?> というものだったんですが、この場合$testに半角文字のaなどが入ると 文字化けしてしまいます。 上手く、マルチバイト・シングルバイト複合文字列を文字数により4分割する方法はないでしょうか? ご教授ください

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

とりあえず strlen()→mb_strlen() substr()→mb_substr() 文字数が分割数でわきれないときどうしたいのか書いてないので そのへんの処理は別途課題ということで

gakumon
質問者

お礼

ありがとうございました

関連するQ&A

  • 文字列分割時の文字化け対応方法

    UTF-8の文字列を複数に分割したいのですがmb_substrなどではどうしても分割した文章の頭や後ろが文字化けします、頭から分割するだけではなく3分割以上でそれぞれ分割した文字列が文字化けしないようにするにはどうしたらいいのでしょうか。

    • 締切済み
    • PHP
  • cgiで文字列操作

    文字列$FILENAME1から★★より右側だけ取り出したいのですが、★★がない場合もあるので、 以下のようにしてみました。 -------------------- $FILENAME1 = "*****★★****"; print "文字列は「$FILENAME1」<BR><BR>\n"; $DIR = "★★"; $MOJISUU = length $DIR; print "探す文字列は「$DIR」<BR><BR>\n"; $position = index $FILENAME1,$DIR; print "$DIRの文字位置は「$position」<BR><BR>\n"; if ($position > 0){ $FILENAME = substr($FILENAME1,$position+$MOJISUU); print "$FILENAME<BR>\n"; } else { print "$FILENAME<BR>\n"; } -------------------- ★★が入ってる場合はうまくいくのですが、入っていない場合うまくいきません。 (結果が表示されない) どこを直したらいいのでしょうか?

  • soraris10 ksh で文字列をバイト指定し

    soraris10 ksh で文字列をバイト指定して入れ替える 8バイトの文字列の4バイト目と7バイト目を入れ替えたい場合、簡単にできる方法はありますか? 文字列は半角英字のみです。 echo abcdefgh | awk ’{print substr(ゴニョゴニョ) substr(ゴニョゴニョ)}’ で頑張ってやりましたが、美しくなかったので、sedとかでもっと簡単にできないでしょうか。 宜しくお願いいたします。

  • 文字列取得 substrではできません。

    1バイト2バイト混在文字列を substrで取得すると、2バイト文字が半分になるため最終文字が文字化けします。 1、2バイト混在文字をうまく取得できる関数はありますか?

    • ベストアンサー
    • PHP
  • plpgsqlでのbyte数指定での文字切り出し

    postgresql(plpgsql)にて、byte数指定での文字列切り出しを行いたいのですが、よい手法などありませんか? substr(substring)だと、文字数の指定となり、対象がマルチバイト、シングルバイト文字混在だと意図した値が取得できません。 ※Oracleのsubstrbに相当するものです。 ※select substr(カラム, 1, 20) from ...的な取得がしたいです。 よろしくお願いします。

  • 文字列の検索について

    こんにちわ。文字列の検索について質問があります。 ↓のコードは、 「$str という文字列の中に"<!>" という文字列が含まれていたら、その都度その位置を 知らせる」と意図したものです。 $str の中に "<!>" が3つ含まれていたら、3回それらの位置を知らせるはずです。 しかし、実際は、最後の $iの位置だけ出力されます。 どこに問題があるのでしょうか? よろしくお願いいたします。 -------コード(ココカラ)------- for ($i=1; $i<length; $i++) { $strsub=substr($str, $i, $i+2); if ($strsub == "<!>") { echo $i; echo "\r\n"; } } -------ココマデ-------

    • ベストアンサー
    • PHP
  • UNIXで文字列分割

    UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。

  • カッコを使った文字列の分割について

    文字列がいくつか存在し(個数不定)、そのそれぞれの文字列はカンマで区切られております。 その中には、文字列+カッコに挟まれた文字列、というのも存在します。 ex1) hoge,test(hogehoge),nana その文字列をカンマで区切り、それぞれをaタグで結びます。 ex2) <a href="hoge">hoge</a>/<a href="test(hogehoge)">test(hogehoge)</a>/<a href="nana">nana</a>/ ---現段階で自力で完成したのはここまでです--- 今度はそのうち、カッコで区切られているモノも分割し、aタグで結ぼうと思います。 ex3) <a href="hoge">hoge</a>/<a href="test">test</a>(<a href="hogehoge">hogehoge</a>)/<a href="nana">nana</a>/ このように扱いたいのですが、どうすればいいでしょうか。 参考までにex2までのソースを張っておきます。 お返事、お待ちしております。 以下、ソース抜粋 $LOADSNG="hoge,test(hogehoge),nana"; $EXPSNG=split(",",$LOADSNG); foreach($EXPSNG as $KEYSNG=>$VALSNG){ echo ($KEYSNG==0?"":"/").'<a href="'.$VALSNG.'">'.$VALSNG.'</a>'; }

    • 締切済み
    • PHP
  • PATH_INFOで「?」を含む文字列を受け取る方法

    環境変数 PATH_INFOで「?」(クエスチョンマーク)を含む文字列を受け取りたいです。 例えば「hoge.php/test?abc」で $g = $_SERVER['PATH_INFO']; $g = substr($g, 1); echo $g; とすると「abc」と表示されてしまいます。 この際「test?abc」と表示させるには、どのようにすれば良いでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 文字列の分割

    エクセルであるセルに入力された文字列を分割したいのですがうまくいきません。 下記のような感じで、文字+数字の入力になっており、文字の数及び数字の数は決まっておりません。 あいうえお123456 かきく98765 さしすせ2222 これをなんとか別々のセルに下記のように分割したいです。 あいうえお 123456 かきく    987654 さしすせ  2222 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。

専門家に質問してみよう