• ベストアンサー

英語と日本語の文章でそれぞれの文字数をカウント

英語と日本語が混ざった文章があるのですが、英語と日本語の文字数がどれだけあるのか、また、その比率をphpで調べたいと思っています。 例えば、「これは日本語Englishだ」という文章の場合、「英語は7文字、日本語は7文字。その比率は1:1」というように結果を出したいのですが、どのような方法がありますか? よろしくお願い致します。

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

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.2

ああ、以下の箇所 // 比率の書き出し if($jcnt > $ecnt){ echo round($jcnt / $ecnt)." : 1"; } else if($cnt != $ecnt){ echo "1 : ".round($ecnt / $jcnt); } else{echo "- : -";} は // 比率の書き出し if($jcnt > $ecnt){ echo round($jcnt / $ecnt)." : 1"; } else if($jcnt != 0 && $ecnt != 0){ echo "1 : ".round($ecnt / $jcnt); } else{echo "- : -";} の間違いです。

gogo8999
質問者

お礼

ありがとうございました。 お礼が遅くなってしまい申し訳ありませんでした。 是非参考にさせて頂きます。

その他の回答 (1)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

回答がないので...。 比率は四捨五入しています。 //1:1ではなくて、100:100とかのほうが正確だと思いますが。 ちゃんとできているかどうかはご自身でお確かめ下さい。 <?php $word = "これは日本語Englishだ"; $enc = "UTF-8"; // 文字コード指定 $jcnt = 0; // 日本語の文字数を格納 $ecnt = 0; // 日本語以外の文字数を格納 // $wordに文字列があれば実行 if($word != ""){ $len = mb_strlen($word,$enc); // 調査する文字列の文字数 while($len > 0){ $len--; $thisword = mb_substr($word, $len, 1, $enc); // 1文字抜き出す // 日本語が含まれている if(preg_match("/[一-龠ぁ-んァ-ヴーa-zA-Z0-9]/u",$thisword)){ $jcnt++; } // 日本語以外 else{ $ecnt++; } } } echo "日本語(".$jcnt.") : 日本語以外(".$ecnt.")<br>"; // 比率の書き出し if($jcnt > $ecnt){ echo round($jcnt / $ecnt)." : 1"; } else if($cnt != $ecnt){ echo "1 : ".round($ecnt / $jcnt); } else{echo "- : -";} ?>

関連するQ&A

専門家に質問してみよう