phpで、ギリシャ文字の文字数カウントがうまくいきません。


mb_strlen( $moji, 'UTF-8' );

で、「5」になってしまいます。
コードはUTF8で書いています。

mb_strlen( mb_convert_encoding($moji, 'UTF-8', 'auto'), 'UTF-8' );

にしてみましたが、「5」になってしまいます。
一応「あい」とかだと「2」ときちんと表示されます。
「きごう」で変換される「ギリシャ文字」だけが、違う数字になってしまいます・・・。

ギリシャ文字なども含めて、入力された文字列の「文字数」をカウントして、
文字と共に利用したいと思っています。
(mixiのように、名前に使えるように)

なにか参考になる情報やアドバイス頂けると助かります。

回答の条件
  • 1人5回まで
  • 登録:2008/02/21 02:54:54
  • 終了:2008/02/21 17:10:09

回答(1件)

id:bayan No.1

bayan回答回数100ベストアンサー獲得回数132008/02/21 06:59:04

ポイント60pt

$moji の中身はフォームから送信されたデータですかね。

文字コードはUTF-8ではないのでしょう。

mb_convert_encoding は文字コードの判定に失敗しているようです。

スクリプトの先頭で次のように書いたらどうでしょうか。

mb_language("Japanese"); 
id:onigirin

どうもありがとうございます。

$mojiはフォームからのデータです。

mb_languageを書きましたが、直りませんでした。

確かに文字コードがおかしいようですが、コンバートできないようです・・・。

ギリシャ文字だけがおかしくなります。

echo mb_detect_encoding($moji); //ASCII

$test = mb_convert_encoding($moji, 'UTF-8', 'auto'); // 'auto'を'ASCII'にしても同じ結果

echo mb_strlen( $test, 'UTF-8' ); //5

echo mb_detect_encoding($test); //ASCII

echo $test; //φ

2008/02/21 16:20:04
  • id:onigirin
    フォームからの入力でなく、コードに

    echo mb_strlen( 'φ', 'UTF-8');

    と書いてみると「1」と表示されました。
    フォームからのデータに問題がありそうですが、
    文字コードがASCIIから変わらなくて・・・。
  • id:onigirin
    解決しました。

    htmlentitiesを別の場所で挟んでいたため、φ に変換されていました。

    そのため「5」になっていました。
  • id:tezcello
    ハマる時ってのは、そんなモンですね。

    あまり関係ないですが、僕は、デバッグ時の出力は、echo, print ではなく、var_dump() の方を多用します。
    文字列なのか、数値なのかもハッキリしますし、ブラウザ上では見えない文字を含んでいる場合も文字数から判断できますし。
    読み難く、鬱陶しい事も多いですが。
  • id:onigirin
    どうもありがとうございます。

    なかなか悩み続けたので、これからは
    デバック時くらいはvar_dump()に統一していこうと思います・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません