• ベストアンサー

マルチバイトのチェック

文字を格納した変数に、マルチバイトが含まれていたらtrue無ければfalseみたいな処理がしたいのですが、どのようにすればよいでしょうか?

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

だいぶ適当でよければ・・ var_dump( isMB('abc') ); var_dump( isMB('あbc') ); var_dump( isMB('あbc') ); function isMB($value) { $value = mb_convert_encoding($value, "UTF-8", "auto"); return strlen($value) != mb_strlen($value); }

mpqfiogwd
質問者

お礼

これはいいです!ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hyoro
  • ベストアンサー率71% (5/7)
回答No.1

下記の処理で半角だけかどうかをチェックできないでしょうか? つまり、flaseが返ってきたら、マルチバイトが含まれているということになります。 function is_hankaku( $_str // 文字列 ) { $pm1 = '[^\w\s\-\^\\\!\"\#\$\%\&\'\(\)\=\~\|\@\[\`\{\;\:\]\,\.\/\<\>\?\_]'; if ( preg_match( "/$pm1/", $_str ) > 0 ){ $rtn = 0; } else { $rtn = 1; } return ( $rtn ); } #利用する漢字コードによっては、正しく判断できない可能性があるかもしれません。

mpqfiogwd
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マルチバイト文字を画像に書き込みたい

    いつもお世話になっています。 画像に文字を書き込むプログラムを作成中なのですが、 日本語を書き込もうとすると文字化けを起こしてしまいます。 文字は、EUC-JPで処理するようにしています。 【index.php】にHTMLでフォームから値(文字列やフォントなど)をとり、 【a.php】で画像に文字を書き込む処理をし、 【index.php】で作成した画像を表示させるプログラムです。 マルチバイト文字を送信する際に、 $text=rawurlencode($text);  【index.php】 をし、【a.php】では、   $text=$_GET['text'];   $text=rawurldecode($text); をして、   imagettftext($im, $fontsize, 0, 12, $fontsize+8, $color, $font, $text); 書き込みを行っています。 マルチバイト文字を送信する際にこの方法が出来ない場合、他に方法があるのでしょうか?? 開発環境は、Windows XP、PHP5.2.5,Apache2.2です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • マルチバイトの文字列の検索方法

    いつもお世話になります。 マルチバイトの文字の中から検索した文字が含まれているかどうか を調べる方法を教えて下さい。 判定結果として$_GET['hantei']から受けた値は次のようになります。 "朝昼夜" "朝昼" "昼夜" など朝・昼・夜の3文字の組み合わせの中から 朝が含まれているかどうか 昼が含まれているかどうか 夜が含まれているかどうか を検索して含まれているとTRUEを返すようにしたいのですが、 よく分かりません。どうぞ御指導下さい。

    • ベストアンサー
    • PHP
  • ifの条件式 !について

    以下処理があります。 1.宣言、初期化 var A = new Array(); A[1] = A[2] = A[3] = false; 2.条件判断 if(!A[1] && !A[2] && !A[3]){ A[1] = $A[2] = A[3] = true; }else{ 処理 } } 質問:宣言⇒ifに処理が流れた時、条件式の内容は ・A[1]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[2]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[3]の否定⇒A1は、falseが格納されているので、否定でtrue。 よって、 if(true && true && true){ A[1] = $A[2] = A[3] = true; } で結果、配列の1~3は、全てfalseから、trueに変更されるという考えで間違っていないでしょうか? よろしくお願いします。

  • unicodeからマルチバイトへ

    unicodeからマルチバイトに変えたので、ウィンドウズプログラムが できるようになりました。 でも、問題は毎回unicodeでマルチバイトに変えるのが面倒です。 どうしたらせっていできるのでしょう?

  • VC++ マルチバイト文字とUniCode文字??

    VC++のプロジェクトプロパティには文字セット指定があります 『マルチバイト文字セット』『UniCode文字セット』の2者が選択出来ますが、これらの選択の優劣は何処にありますか? この選択の適否が分からない私は参考にしているサンプルがマルチバイトである時にはマルチバイトを、またUniCodeで書かれたサンプルを見ている際にはUniCodeを指定しており、恥ずかしいかぎりです 選択の判断基準を如何すれば良いのかご指導をお願い申し上げます 更に恥ずかしい質問】なぜC#には文字セット指定が見当たらないのでしようか???

  • バイナリ5バイトを文字10バイトに変換

    バイナリ5バイトを文字10バイトに変換 いつもお世話になっています。 C++初心者です。 12 34 56 78 90(バイナリ5バイト)を 1234567890(文字10バイト)に変換する方法はありますか? バイナリで読み込んだデータがあり、特定箇所に、数字10桁が格納されてます。 下記イメージです。 12 34 56 78 90(バイナリ5バイト) それを文字10バイトで処理するしたいのですが、変換方法がネットで探せませんでした。 お知恵をお貸しください。 環境はVC++6 です。 よろしくお願いします。

  • 日本語(マルチバイト)でのwordwrap処理

    簡易メーラーのようなものを作っており、返信の際に改行と”>”が入る処理をしたいと思っています。 しかし、wordwrapを使って分割しようとすると、文字列の途中に半角文字が奇数個入っている場合、その後の文字が化けてしまいます。 mb_splitという関数がありますが、これはまだ実験段階ということなので、今の時点での利用は避けたいと思っています。他のマルチバイト関数を一通り見てみましたが、mb_split以外にwordwrapのような機能は無いように見えました。 どのようにすれば日本語で自動改行処理ができますでしょうか。ご教授下さい。宜しくお願いします。

    • ベストアンサー
    • PHP
  • VC++で日本語(マルチバイト)ファイルの読み込み

    VC++で日本語(マルチバイト)の文字が含まれているファイルを読み込もうと思っています。 例えばunicodeのファイルとして下記の内容があるとして、 11111 abcdef いろはにほへと このファイルから1文字ずつ読み込みたいのですが、ヘルプで調べたところfgetwc関数でマルチバイトの読み込みができるということを調べました。 ファイルのオープンは_wfopenを使用しているのですが、テキストモード・バイナリモードでどちらで開いても、fgetwc関数の戻りはファイルを1byte読んだ結果を返します。 半角文字の場合は"1"とか"a"を単純に呼んで、マルチバイト文字であれは"い"とか"ろ"というデータを読み込みたいのですが、どうすればいいでしょうか?

  • PHPマルチバイト文字列関数

    FedoraCore4のPHP-version5.0.4 rpmをインストールしたのですが、マルチバイト文字関数が標準になっていないのでマルチバイト文字関数が使えるようにしたいのです。 今のところ一度PHPをアンインストールして、ソースを落としてきて、configureの時にオプションで指定して対応しようかと考えています。 しかし、超初心者ですのでもう少し簡単な方法を探しています。ご存知の方はぜひご教授いただきたいと思います。 よろしくお願いいたします。

  • VBAでテキストファイルの改行を無視する方法

    VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。 1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。 読み込むテキストファイルは _________0_________1_________2・・・・________10 _______100________51 のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり) 以下のように作ったのですが、改行のあるところからずれてしまいます。 Sub ファイル読み込み() Dim buf(30000000) As String Dim i As Long i = 0 With CreateObject("Scripting.FileSystemObject") With .OpenTextFile("C:\test.text", 1) Do While .AtEndOfStream <> True buf(i) = .read(10) Loop End With End With End Sub 「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。 どなたかご教授よろしくお願いします。