• ベストアンサー

全角半角混在の文字列から○文字まで取得する方法

はじめまして! MySQLから取得した文字列をPHPで例えば10文字まで表示したいのですが、良いやり方ありますでしょうか? 文字列には全角半角が混在しているので substr関数だと、うまく取得できない場合があります。よろしくお願いいたします。

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

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

  • ベストアンサー
  • mac_mini
  • ベストアンサー率42% (54/128)
回答No.1

PHP4からですが、 mb_substr()で可能ではないでしょうか?

参考URL:
http://php.s3.to/man/function.mb-substr.html
negi_xp
質問者

お礼

mb_substrですね! 早速調べて試してみます。 ありがとうございます。

negi_xp
質問者

補足

mb_strimwidth() なんて関数を発見しました! 今回このやり方でやってみようと思います。 ありがとうございました!

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

<?php $text="100型戦闘機"; $limit=10; #10バイト以下での文字の切り出し for($i=mb_strlen($text);$limit<strlen($result=mb_substr($text,0,$i));$i--) ; print $result; ?>

negi_xp
質問者

お礼

なるほど、mb_***という関数類があるのですね! ありがとうございます!!

関連するQ&A

  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • substr で全角半角混在の文字列を抜くには…

    全角と半角の混ざった文字列で下のようにすると、1byte文字が混ざったときの最後の1文字が文字化けします。 $kensaku = substr($namae, 0, 10); 原因は分かったので色々なサイトを調べたのですが、頭がついてきません… 全角だけのときは10byte 半角が奇数混じったときは11byte 半角が偶数混じったときは10byte を$kensaku に渡すには どの様な記述をすればいいのでしょうか? 既出の質問で申し訳ございませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 半角/全角文字混在データの分割方法

    VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して セットする方法を教えて下さい。 あるファイルの項目として、「住所」という項目があるとします。 このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、 セットします。 この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、 ”半角/全角文字混在”でデータが格納されています。 画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。 この様な条件で、単純に取得したデータを2分割すると、 取得したデータが、全て半角か全角なら問題はないのですが、 例えば、1文字目が半角で、以降が全て全角文字だった場合に、 最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。 また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、 うまく利用できていないようです。(コード体系の違いでしょうか?) どなたかご教授下さい。 よろしくお願いします。

  • 全角半角考慮した文字列分割

    A列           B列         C列 あいうえおかきくけこ  あいうえ      おかきくけこ アイウエオカキクケコ   アイウエオカキクケ  コ あいうえオかきくけこ   あいうえオ    かきくけこ A列に全角半角混在のテキスト項目があります。 B列、C列に以下のルールで分割したいのですが、Excel関数で 実現可能でしょうか?可能な場合は式をご教授して 頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように 全角半角を考慮して分割したいと考えております。 B列  A列9桁目が半角の場合は半角9文字 A列9桁目全角の場合は半角8文字(全角4文字)をB列へ C列  A列10桁目が半角の場合は、左端10桁目~半角9文字 A列10桁目が全角の場合は、左端9桁目~半角9文字

  • 全角、半角、改行コードが混在文を指定文字数でカットしたい。

    こんにちは。 現在、phpで簡単な動的ページを作成しています。 行き詰っていますのは、文字列抽出?です。 ある文字列を先頭文字から300文字だけ切り出して以降はカットしてしまいたいのです。 但しその文字列が全角、半角、改行コード(EUC)が混在していまして、うまく切り出せません。 混在文字列からも文字列指定で切り出す関数や手段をご存知の方はいらっしゃいませんか? お手数では御座いますが、お教え下さい。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 全角・半角混在の文字列から半角文字のみ取り出す

    エクセル勉強中です。問題集で理解できないところがあります。 数式がどういう意味をもつのか教えて頂けるとありがたいです。 よろしくお願いします。 画像添付の問題になります。 A列に製品名が入っています。(製品番号:半角文字)(製品名:全角文字) B列に半角文字の製品番号だけを取り出しなさいというものです。 半角文字の開始位置がバラバラになっているところが問題のポイントになっています。 回答ですが B2: =MID(A2,MATCH(1,INDEX(LENB(MID(A2,COLUMN(2:2),1))*1,0),),LEN(A2)*2-LENB(A2)) こちらで半角文字のみ取り出せるようです。回答には数式のみで何故この関数を使うのか? 使うことでどういった結果を導くなどの解説が一切ありません。(ちなみに出版会社の便利技的な問題集です) MID関数で製品名A2から開始位置を指定して、全角半角をLEN関数LENB関数で半角文字数を 算出して文字列を抽出するという事は理解できます。 ただ、この開始位置の指定の所が理解できません。 数式を分割してみましたが =MID(A2,COLUMN(2:2),1)の所はどの行も製品名の1文字目ですよね・・・ その値にLENB関数で文字数? 数式の検証で見てみると配列のような結果が次々と現れて・・・ MATCH関数もありますしINDEX関数が何か関係しているような気はしているのですが、 INDEX関数と言えば配列に行番号・列番号と例えば表の該当するセルの位置抽出の 知識しかありません。一つのセルでINDEX関数? すいません。独学で勉強していてこの程度の知識ですが、この数式の考え方教えてくださる方よろしくお願いします。

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

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

    • ベストアンサー
    • PHP
  • IME-2000の文字登録、何故か全角・半角が...

    IME-2000を利用しているのですが、英数字が含まれている文字(単語)を登録すると、元々半角の文字を登録しても、何故か半角のみの文字だけでなく、全て全角、半角全角の混在したものが登録されて、いざ変換しようとしたら、変換語列の中に全てが表示され、本来出そうと思っている文字を選び出すのが大変な状態になっています。 もっと面倒なのは、英単語やe-mailアドレス(全て半角の英数字の場合)を登録したときなのですが、半角、全角のみならず、頭文字が大文字、小文字、または大文字・小文字の混在した物と8個も登録されている始末。 こういうのを直すとしたら、どうしたらいいでしょう?

  • 全角半角を意識した文字分割

    A列           B列   C列  D列  E列     あいうえおかきくけこ  あ   いう  えお  か アイウエオカキクケコ    アイウ   エオ  カキ ク あイウえオかきくけこ    あ   イウえ  オか き 先ほど同じような質問を一度しているのですが、 A列に全角半角混在のテキスト項目があります。 B列、C列、D列、E列に以下のルールで分割したいのですが、 Excel関数で 実現可能でしょうか? 可能な場合は式をご教授して頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように全角半角を考慮して分割した いと考えております。 B列(半角3文字)  A列3桁目が半角の場合は半角3文字 A列3桁目全角の場合は半角2文字(全角1文字) C列 (半角4文字) A列4桁目が半角の場合は、左端4桁目~半4文字分 A列4桁目が全角の場合は、左端3桁目~半角4文字 D列(半角4文字) A列7桁目が半角の場合は、左端7桁目~半4文字分 A列7桁目が全角の場合は、左端6桁目~半角4文字 E列(半角2文字) A列11桁目が半角の場合は、左端11桁目~半2文字分 A列11桁目が全角の場合は、左端10桁目~半角2文字

  • JNIを使った、全角半角が混在した文字列の引数、戻り値の受け渡し

    JNIを使用して、JavaからExcelを操作しようと考えております。 ワークブックを開くDLL関数を用意し、 その際に、引数としてファイルのフルパスを、戻り値として開かれたブックの名称を返すようにしたのですが、 半角英数の文字は正しく帰ってくるのですが、全角のファイル、及びフォルダを引数に指定した場合、 文字化けが発生し、ブックを開けず、困っております。 JNIを使った全角半角が混在した引数、戻り値の関数の受け渡しを行なうにはどのようにすればよいのでしょうか。 ご回答をよろしくお願いいたします。

専門家に質問してみよう