忍者ブログ

エンジニア初心者の備忘録

エンジニア初心者が躓いたことハマったことを公開します!

日本語の文字を数えるということ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

日本語の文字を数えるということ

今回は、日本語の文字を数えることに関して、プログラム超初心者が、躓いて転んだので、経緯を書き留めておきます。

今回は、自分が試行錯誤した経緯を整理せずに書いています。
なので、調べた流れ通りに、あっちに行ったりこっちに行ったりしているので、お忙しい方は、最後の赤字のところだけ見てください、





まだ、研修でお問い合わせフォームの周辺にいます。
このサーバーサイドのバリデーションに関して、「会社名」の必須入力のための文字数チェックを
mb_strlen()関数を使用して行っていました。
文字数カウントの条件は、20文字未満としていました。

それまで、テストを「xyz株式会社」で行っていました。
これで問題ありませんでした。

ところが、最後のテストで「プラムザ株式会社」としたところエラーとなりました!
8文字なのに!!

var_dumpで調べたところ20文字以上!?でした。
色々調べて設定がおかしいらしいと思い、php.iniを確認することに、
phpinfo();でphp.iniがどこにあるかを確認!
「Loaded Configuration File 」の項目で「/etc/php.ini 」にあることが分かりました、
「/etc/php.ini 」を確認!



「;mbstring.internal_encoding = SJIS」となっていました。
コメントアウトされている、(「;」(セミコロン)が行頭についてるということ)この設定が効いて無い、、、
mbstring.internal_encoding を 指定しなかった場合のデフォルト設定は、mbstring.language の設定に対応した mbstring の内部文字コードが設定されるようです。
そして、mbstring.language に何も設定しない場合、neutral 設定にされるようです。
と調べてきたけど、そもそも、mbstring.internal_encodingは何?
調べる!
mbstring.internal_encodingは、mb_strlen()関数等のマルチバイト文字列関数(mbstring)の引数に文字コードを省略した場合のデフォルト値として利用される設定のようです!!

ちなみに、マルチバイト文字列とは、2バイト以上のデータで表現される文字だそうです。
そして、日本語のひらがなや漢字などの全角文字はすべての文字セットで多バイト文字となるようです。
これをキチンと設定するか関数に引数を設定しないと、うまくいかないのです!


それでは、この問題の解決策を3つに整理してみました。

①php.iniのマルチバイト文字コードの設定を変える!
  mbstring.internal_encoding = UTF-8 ←;は取ります

②それぞれの関数でマルチバイト文字コードを設定する!
  mb_strlen(“株式会社プラムザ”, “UTF-8″);

③スクリプトの先頭にマルチバイト関数で使う文字コードを設定する!
  mb_internal_encoding(“UTF-8″);

私は、今回は、①の方法を採りました。
効率良さそうですよね~

なお、なぜ、UTF-8を設定するとよいのかや文字コードの詳細等に関しては奥が深く、まだまだ、理解し切れていない点が多く、論理の飛躍が多々あります。
文字に関しては、また、機会があれば掘り下げていきたいと思います!

以上です!


【参考サイト】
http://php.net/manual/ja/function.mb-strlen.php
http://php.net/manual/ja/function.strlen.php
http://itpro.nikkeibp.co.jp/article/COLUMN/20070307/264117/
http://php1st.com/163/
http://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/php/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E7%92%B0%E5%A2%83%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E5%AF%BE%E7%AD%96.php
http://e-words.jp/w/E3839EE383ABE38381E38390E382A4E38388E69687E5AD97.html
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_mbstring.html#mbstring_setting
PR

コメント

プロフィール

HN:
プラムザ 太郎
性別:
非公開

P R