重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか?

mb_substr関数で第3パラメータはバイト数で指定するようです。
関数リファレンスでは「最大文字数」って表現になってます。
http://php.net/manual/ja/function.mb-substr.php
半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。
最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。

いったん半角→全角にして、6バイト分を切り出すのはできます。
でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。
mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。
でも、なんかスマートじゃないんですよ‥‥。

なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

A 回答 (2件)

ファイルの文字コードと、mb_internal_encodingとmb_substrの指定文字コードを


あわせてください
バイト数ではなく文字数だとわかると思います

<?PHP
mb_internal_encoding("UTF8");
$str="abcあいうxyz";
$substr=mb_substr($str,2,3,"UTF8");
print $substr;
?>
    • good
    • 0
この回答へのお礼

回答ありがとうです。
あれ‥‥? エンコード指定はあってるはずなのに、あってない?


ホントだ、あってなかった。あれー? なぜ?
すみません、ちょっと間抜けな自分に気が付いてしまいました。
ベストアンサーに選ばせてもらいます。

お礼日時:2013/07/09 16:27

PCは『半角文字(一バイト)』の世界です。


文字コードを『ユニコード表記』にすれば取得出来るのでは?
    • good
    • 0
この回答へのお礼

素早い回答をありがとうです。
おお、エンコードを変える発想はなかった‥‥UTF-32なら固定長でしたね。
BOMだけ考慮しておけば簡単にできそうな気がしてきました。
ちょっと試してみます。

お礼日時:2013/07/09 16:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!