RSS

mb_strlenを使用するときの文字コード指定

11 2月

やりたいこと。

  • mb_strlenをつかって文字列が所定値以上ならmb_substrできりとって表示
  • なので

    if(mb_strlen($Member['Member']) > 10 ){
    	$aryItem['MaterialName1'] = mb_substr($Member['Member'],0,10);
    }else{
    	$aryItem['MaterialName1'] =$Member['Member'];
    }
    

    とやっていたら、切り取った文字列の最後のほうがなんと文字化け…。。。調べたらどうも

    mb_language("Japanese");
    mb_internal_encoding("UTF8");
    

    と、このような記述が必要であるらしい。で、ためしに書いたら文字化けが解消した。もちろんソースもUTF8なんだけどね・・。で、だ。この関数を色々な箇所で使うことになった場合、いったいどこにかいたらいいのか?ということ。今上記の処理は.ctpファイルにやっているのでテンプレートに全部かくのかな…。とちょっと嫌な感じに。ちなみに、default.ctpに書けば共通でOK?とか思ったけどだめだった。よくドキュメントを読んだら、こちらにあったんだけど、第4引数に”UTF-8″を指定すればよいらしい。実は会社では文字化けしたのだけれども、自宅ではphp.iniの設定なのか上記の設定を必要とせずとも文字化けはおきなかった。関数を呼び出す時には明示的に第4引数にUTF-8だよ!って言ってあげるのが一番良いのかねえ。ググってみたけど同じ状況になってそうな人はあまりいなかった。主に携帯やメール送信の時に明示的にかいたほうがいい!っていう記事をよく見かけました。php.iniでカバーできるのだろうけれども・・・。本番以降時にphp.iniが修正できるのか微妙なのでcakephpなどの設定で一元管理できるところがあれば、そちらで対応したいところ。

    広告
     
    5件のコメント

    投稿者: : 2月 11, 2010 投稿先 PHP

     

    mb_strlenを使用するときの文字コード指定」への5件のフィードバック

    1. nojimage

      2月 11, 2010 at 12:29 am

      cakephpの共通設定はbootstrap.phpに書くと幸せになれます(タブン

       
      • yashio

        2月 11, 2010 at 12:54 am

        コメントありがとうございます!なるほど、そちらに書くのですね。
        ちなみに・・・。webroot/index.phpに書いても同じことでしょうかね?

         
        • nojimage

          2月 11, 2010 at 10:05 am

          Dispatcharクラスの呼び出しの前に書けば動作は一緒ですが、webroot/index.phpに追記するのは非推奨です。
          # webroot/index.phpを弄るのは変態的なパス構成の場合のみ

          アプリケーション固有の設定は app/config/ 配下にまとめておくとすっきりした気分になります。
          app/config/core.php に追記でもいいんですが、core.phpは長ったらしいので、app/config/bootstrap.phpに書くのが一番スマートなのです。

           
    2. MASA-P

      2月 11, 2010 at 4:41 pm

      app/config/bootstrap.phpに書くのが手っ取り早いと思いますが、php.iniが編集できるのなら、そちらにしっかり指定しておいた方が良いと思います。もしくは.htaccessでもできるかも。

      ちなみに、core.phpに書かれているApp::write(‘encoding’)とかもありますが、こちらはmultibyte.phpが呼ばれた場合だけmb_internal_encodingにセットします(毎回やるわけではないので注意!)。

       
      • yashio

        2月 11, 2010 at 6:36 pm

        お二方、返信ありがとうございました。どうやらpnp.ini>app/config/bootstrap.phpということですね。とりあえずは職場のiniファイルで設定ができるか試してみます。共有レンタルサーバーの場合にこのファイルがいじくれるか、かなり疑問なので、そうなった場合はapp/config/bootstrap.phpに書くのが有効だと判断しました!ありがとうございます!

         

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中

     
    %d人のブロガーが「いいね」をつけました。