Ethnaを利用したURLパラメータのマルチバイト文字とエンコード処理

このQ&Aのポイント
  • Ethnaを利用したURLパラメータのマルチバイト文字とエンコード処理に関する問題を解決する方法
  • URLパラメータにマルチバイト文字が含まれる場合、EthnaではShift_JISに自動的にエンコードされてしまうため、文字化けが起きることがある
  • エンコード・デコードの方法について、FirefoxとIEでの動作の違いも考慮する必要がある
回答を見る
  • ベストアンサー

Ethnaを利用したURLパラメータのマルチバイト文字とエンコード処理

前画面よりhttp://localhost/?action_abc=true&test=あいうえお という画面へアクセスした時、 abc画面でtestパラメータを出力すると何故かShift_JISで表示されてしまい、 文字化けを起こしてしまいます。 (前画面・abc画面のactionやview、テンプレートはEUC-JPで作成、 URLパラメータにはurlencode()、urldecode()を使用) その為、出力する前にmb_convert_encoding()を使用しなければならない羽目になっています。 EthnaかPHPの仕様上、URLパラメータは必ずShift_JISになってしまうのでしょうか? また同じ関係で、urlencode()をした時点で、IEだと%~%~・・・と全ての文字が エンコードされるのですが、Firefoxだとhtmlspecialchars()のような動作をし、 エンコードが上手く出来ません。 (Firefoxの仕様上、そのリンクを押した時点でマルチバイトはエンコードされるようですが) 正しくエンコード・デコードさせる方法としてはどうするのが良いのでしょうか? どなたかご教示願います。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • la_pure
  • ベストアンサー率72% (18/25)
回答No.1

こんにちわ。 >EthnaかPHPの仕様上、URLパラメータは必ずShift_JISになってしまうのでしょうか? そんなことはないと思いますよ。 多分、PHPの内部エンコーディングの問題かと。 testパラメータを、$this->af->get('text')か、$_GET['text']で取得しているのかわかりませんが、その値をmb_detect_encodingで文字コードを確認してみてください。 ちなみに私の環境で試してみたところは、内部エンコーディングのUTF-8となりました。 ============================== http://hogehoge.jp/?text=あいうえお var_dump(mb_detect_encoding($_GET['test'])); // -> UTF-8 ==============================

naktak
質問者

お礼

そういえば仕事の初めに内部エンコーディングの設定をSJISにしてました! 本の通りにやれと言われたので・・・。 いつもならEUC-JPで全く気にならなかったのですが、こういう所で支障を来たすんですねー。 ありがとうございます。

関連するQ&A

  • URLのエンコードについて

    JavaScriptで、JSON形式で渡ってきたデータを読んで、一部、文字列を結合して URLを作るんですが、その際のエンコードは encUrl= 'http://test.com/' + encodeURIComponent(xxx) + '/'; (xxxがjsonからきたデータ) で大丈夫でしょうか? たとえば.NETで言うところのHttpUtility.UrlEncodeと同じことがしたいのですが、 URIエンコードだとたぶん違いますよね…。 何を使えばUrlEncodeが出来るのでしょうか。

  • URLエンコードについて

    「 † 」 の文字をUTF-8 でURLエンコードした時の値が2種類あるんでしょうか。 以下の2つのURLエンコードした文字を %EF%BC%8D %E2%80%A0 URLエンコード/ デコードの結果を出力してくれる こちらのサイトと https://www.tagindex.com/tool/url.html こちらのサイト https://tech-unlimited.com/urlencode.html で結果が異なるみたいです。 なぜこういった結果が異なる状況が生まれるのでしょうか そして正しいのはどちらなのでしょうか

  • VBでShift_JISへurlエンコードできないでしょうか?

    VB6もしくはVBAですが、 文字列をShift_JISへurlエンコードしたいと思います。 utfやeucは方法があったのですが、Shift_JISに関しては 見つかりませんでした。 よろしくお願いします。

  • netscapeでアンカーを利用するとURLのパラメータが消えてしまいます(T_T)

    netscapeでアンカーを利用するとURLのパラメータが消えてしまい、 困っています。 例>> 使用前⇒http://headlines.yahoo.co.jp/hl?a=20070119-00000087-jij-spo 上記のようなURLだった場合、アンカー(#testとします。)を利用すると、URLの「?」以降が以下のような 使用後⇒http://headlines.yahoo.co.jp/hl#test となってしまいます。 このためブラウザの「戻る」ボタンを利用すると パラメータが取得できない現象が発生して困っています。 これはNNの仕様なのでしょうか? どうかご協力お願いいたします。

  • 掲示板に携帯から書き込むとURLエンコード

    PHPを使って掲示板を作成しています。 UTF-8でPHPファイルを作成し、UTF-8のテキストファイルにログをためていく感じで作っています。 PCでは、だいたい正常に動くようになったのですが、携帯電話(au/W61S)からの投稿を試してみたところ、投稿結果がURLエンコードの状態になってしまいました。。。 %82%c6%82%a4%82%b1%82%a4%82%c4%82%b7%82%c6 さらにシフトJISでエンコードされているようでしたので、自分のつたない知識を総動員して、以下のような処理をさせることでなんとか形にはなったのですが、かなり処理としては乱暴な気がしています。 携帯電話からの投稿というのは、URLエンコードとして受け取るしかないのでしょうか(auでしか試していないため、他のキャリアだと別の問題が発生するのでしょうか?) また、下記の方法よりももっとスマートに携帯からの投稿を、表示できる文字列に変換する方法をご存じの方がいらっしゃいましたら、ご教授いただければ幸いです。 よろしくお願いいたします。 <?php //フォーム内に入力された文字列を取得 $test = $_GET['formtxt']; //先頭の文字を抽出 $firsttxt = substr($test,0,1); //先頭の文字列が%であれば、URLデコードを行い、シフトJISからUTF-8に変換する if($firsttxt == "%"){ $test = urldecode($test); $test = mb_convert_encoding($test,'UTF-8','SJIS'); } ?>

    • 締切済み
    • PHP
  • セルに入力されている文字列をUTF-8形式にURLエンコードする方法

    Excelでセルに入力されている文字列をUTF-8形式にURLエンコードする方法を探しています。 下記のURLでShift-JISにURLエンコードできるものは提供されているのですが、 UTF-8に変換できるものは見つかりませんでした。 。 http://www.vector.co.jp/soft/winnt/net/se369699.html どうぞよろしくお願いいたします。

  • 文字エンコード

    Firefox2→昨日から3を使っています。3にしてから以下の現象がでました。 http://www.love-secret.com/i/ ↑BBSのトップページのみで文字化けが起こってしまいます。文字エンコードを見ると西欧になっています。 またこちらのBBSをクリックしても同様です。 http://www2.undernavi.com/s/betty.3636/pc/ こちらはメニューバーが出ないので文字エンコードの操作ができません。 どちらもトップページを抜けると正常に日本語表示されます。 そこでお伺いしたいのですが、何かの操作でURLを指定して日本語JISに固定とかできるのでしょうか? また、何か対策が有りますでしょうか? Firefox3になってから起こったので、気になりますし、原因も分かりませんのでどなたかご教授願います。 WIN XP SP3

  • SUBMIT時の入力文字のURLエンコードについて

    本質的にはPerlではないのですが、Perlの 処理中で起こったのでこちらで・・・・ 現在FAQページとFAQを登録するページがあり、 入力 → 確認 → 登録・完了 という流れでページの移行を行っています。 #ちなみにShift_JISです。 日本語だけでなく英語でのFAQを登録する際 『Ω』を入力したかったのですが、当然全角は無理 なので『&Omega;』で登録しました。 が、登録し終わったDBを見ると『Ω』で登録されていました。 そこで、処理を追いかけていて気づいたのですが 確認画面でhiddenとして入れておいた"&Omega;"が POSTされた時点で『Ω』(をURLエンコードしたもの)に 変わっていました。 検証(とりあえずShift_JIS)の為 <form method=GET> <INPUT TYPE="text" name="data1" value=""> <INPUT TYPE="hidden" name="data2" value="&Omega;"> <INPUT TYPE="submit" value="submit"> </form> というフォームを作って、data1に『&Omega;』と 入力してsubmitを行うと ?data1=%26Omega%3B&data2=%83%B6 と、data2はすでに『Ω』に変換されています。 同じく、EUC-JPでもコードこそ違え、同様でした。 西ヨーロッパ言語などの場合、『&#937;』に 変換された状態でうまく(?)行きます。 ブラウザ依存かと思い、IE6,Opera8.5で確認しましたが 同じでした。 これはsubmitでの仕様なのでしょうか? 対応は無理やりやるつもりですが、こうすれば 簡単にできるという事がありましたら教えていただけると ありがたいです。

  • EUC-JPのサイトをSHIFT-JISに変換するには?

    EUC-JPのサイトをSHIFT-JISに変換して表示したいのですが、うまくいきません。 どのへんが間違っているのか教えていただけないでしょうか? <?php header("Content-Type: text/html; charset=Shift_JIS"); //EUC-JPデコードされたURL $url = "http://www.hogehoge.com"; //ファイルとして読み込む $fileUrl = @readfile($url); //エンコードする $encUrl = urlencode($fileUrl); //SHIFT-JISに変換する $newUrl = mb_convert_encoding($encUrl, "Shift_JIS", "auto"); //表示する echo $newUrl; ?>

    • ベストアンサー
    • PHP
  • エンコードについて

    URLエンコードを使用してデーターの受け渡しをしようと思っているんですが。 1ページ目 $cc4=urlencode("ソ"); echo "エンコード={$cc4}<BR>"; 2ページ目 $cc5=urldecode($cc4); echo "デコード={$cc5}"; カタカナの『ソ』が入るとちゃんと受け渡しが出来ません。 どうしたらいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう