2013年5月23日木曜日

codeigniterで日本語のquery_stringが文字化けするのに対応

codeigniterで開発していて、URLで日本語の文字列を渡すときに、文字化けが発生した。

機動戦士ガンダム ⇒ 機動戦士ガンダダ

いろいろなサイト
  • CodeIgniter リクエスト値を内部文字コードに変換処理

  • [Codeigniter-users] POSTが文字化け

  • などを参考にしてみたものの、なかなかうまくいかない・・・

    ということで、PHP base64をURLSafeにする方法を参考に、URLの文字列をbase64形式で変換してみました。

    尚、base64形式に変換した文字列には、「/」「+」「=」が浮くまれるため、URLにそのまま組み込むとおかしくなる。

    そこで、上記3文字については違う文字に変換することで対応した。


    【表示側contoroller】
    ① あらかじめ以下の関数をコントローラーに仕込む
     function base64_encode_safe($s){
      $s = base64_encode($s);
      return(str_replace(array('+','=','/'),array('_','-','.'),$s));
     }
     function base64_decode_safe($s){
      $s = (str_replace( array('_','-','.'), array('+','=','/'), $s));
      return(base64_decode($s));
     }
    

    ② 変換したい文字列を上記関数を通して変換
    $data['name']=$name;  //ここに日本語
     ↓
    $data['name']=$this->base64_encode_safe($name);
    

    ③ エンコードされたリンクを受け取る側
    $work=$name;
     ↓
    $work=base64_decode_safe($name);
    
    


    薫のHackさん、ありがとうございました!