• 締切済み

<FORM>タグで送信したデータの文字コード判別について

いつもお世話になっております。 ブラウザのFORMタグで送信される文字の文字コードをサーバで判断する方法は存在しますでしょうか? というのも、PHPのプログラムで$_POST[]で取得した文字の文字コードを判断したい為です。 パケットキャプチャでHTTPヘッダを確認しましたが、リクエストで送信されるデータの文字コードの記載はありませんでした。 送信される文字コードは、ブラウザで表示してるページの文字コードを確認する以外は無理でしょうか? ※例えば下記のようにdataの文字コードは「UTF-8」です見たいに・・・ /test.php?charset=UTF-8&data=%e3%83%86%e3%82%b9%e3%83%88 宜しくお願いいたします。

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

みんなの回答

回答No.1

あまり精度が良くない気はしますが、mb_detect_encoding()という関数があります。 http://jp2.php.net/manual/ja/function.mb-detect-encoding.php ※例えば下記のようにdataの文字コードは「UTF-8」です見たいに・・・ これが最適だとは思いますが。

tetiteti
質問者

お礼

プログラム側で「mb_detect_encoding()」などを使用し確認するしか方法がないようですね。 ブラウザから何の文字コードで送信しているかヘッダに書いてあれば楽なんですけどね なるべく、「※例えば下記のようにdataの文字コードは「UTF-8」です見たいに・・・」で対応するように致します。 どうも有難う御座いました。

関連するQ&A

  • コード上の埋込み漢字コードの文字化け

    PHP のソースコード上に埋め込んでいるべた書きの2バイトコードが 文字化けを起こしてしまいます。以下、経緯を含め詳しく書きます。 1.HTMLのFORMよりデータを入力。(toiawase.html) 2.PHPにて、入力データをWebブラウザ上に表示して確認。(mail_kakunin.php) 3.PHPにて、確認済みのデータをmail()関数にて送信。(mail_send.php) 上記の状態で正常動作を確認。 「1」の toiawase.html にて、charsetをUTF-8にする必要があり 下記のように charset のみ書き換えました。 <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" /> すると以下の不具合が発生しました  ・上記の「2」の部分ですでに入力したデータのみ文字化けを起こす。  ・当然、「3」にての送信でも入力データのみ文字化けして送られる。 よって、「2」のmail_kakunin.php にも以下の分を追加しました <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" /> すると以下のような不具合が発生しました  ・上記の「2」の部分で入力データは mb_convert_encoding() で UTF-8   に変換し、文字化けしませんが、今度はPHPのコーディングでべた書きの2バイト   コードが文字化けを起こす。 HTML上で、UTF-8 の漢字コード指定なので、PHPにべた書きの2バイトコードも UTF-8 で出力する必要があるのですが、やり方がわかりません。 ご存知の方教えていただけると助かります。

    • ベストアンサー
    • PHP
  • ブラウザが文字コードを誤判別する

    PHPでフォームを含むHTMLを出力しています。 POSTを使ってページ移動すると、ブラウザが文字コードを誤判別します。 表示が文字化するのではなく、ブラウザのエンコードが誤判別され、POSTで次ページに移動するとPOSTされる文字列だけが文字化けします。 リンクによる移動では、誤判別しません。 php.iniの設定 default_charset = Shift_JIS mbstring.internal_encoding = EUC-JP mbstring.http_output = Shift_JIS PHPのソースは、EUC-JPで書いています。 出力するHTMLには、 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/> をヘッダーに記述しています。 この現象は100%発生するわけではなく、完全にランダムです。 確実な再現手順はありません。 ブラウザは、WinXP Pro SP2 + IE6.0 です。 ブラウザの不具合でしょうか?

    • ベストアンサー
    • HTML
  • PHPの文字コードについて

    PHPとmysqlの文字コードの関係について 1.データベースは文字コード utf8_unicode_ci で作成しています。 2.以下のようにテーブルを作成しました。 CREATE TABLE `test` ( `qid` varchar(10) NOT NULL, `qtitle` varchar(255) default NULL, PRIMARY KEY (`qid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.show.phpの中で以下のように 出力しようとすると文字化けします。 show.phpファイルは文字コードutf8で保存しています。 <?php print($qTitle); ?> ブラウザの文字コードの設定はShift-Jisです。 ブラウザの文字コードを変えずに正しく表示させるためには どうすればいいのですか? ご教授よろしくおねがいします。

    • 締切済み
    • PHP
  • 文字コード指定について

    中国の無料HPスペースにPHPをアップロードしてテストしていますが、文字コードでどうしても引っかかります。 利用しているサイトはここ http://51j.cn/ PHPファイル中にヘッダに <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP"> と指定しているにもかかわらず、ブラウザで開くと「簡体字中国語」が指定されてしまいます。 どうにかEUC-JP にしたいのですが、何か方法はあるでしょうか。

    • ベストアンサー
    • PHP
  • フォームの文字コードについて

    phpについて質問なんですが、<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">となっているページのフォームの内容の文字コードをphp側で確認すると、文字コードが「EUC-JP」となっています。 これはこういうものなのでしょうか? ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 文字コードの違うデータを判別したい

    データの文字コードが異なるファイルを確認します。 以下のスクリプトで$get_csvのデータの文字コードを判別にShift-JISで別のファイルに格納したいのです。 (スクリプト) $get_csv = get("$_[0]"); if ($get_csv =~ /utf-8/i) { &jcode'convert($get_csv,'sjis','utf-8'); } if ($get_csv =~ /EUC-JP/i) { &jcode'convert($get_csv,'sjis','euc'); } (ここまで) &jcode'convertの使い方が悪いのか?データをうまく変えられていない感じがします。 上記の内容で説明が足りてますでしょうか? よろしくお願いいたします。

  • PHPで受ける文字コードは何に依存する?

     例えばmb_convert_encoding()で変換するとき、元の文字コードは何に依存されるのでしょうか?  フォームで送る場合は、フォームページのHTMLのでmetaタグに指定されている文字コードになるんでしょうか?  charset=utf-8とmetaタグで指定されている場合、PHPのmb_convert_encoding()で受け取るときの変換前の文字コードはutf-8?  データをutf-8で扱いたいとき、フォームページをcharset=utf-8で作っておけば、mb_convert_encoding()でわざわざutf-8に変換するようにしておかなくても大丈夫ですか?

    • ベストアンサー
    • PHP
  • 特定ファイルのみ文字コード変換

    現在PHP5を文字コードUTF-8で使っているのですが あるphpファイルのみSJISで出力したくて色々調べphp.iniを設定したのですが、どんなに強引(無謀)な方法を使ってもブラウザで表示すると文字コードがUTF-8で認識されてしまいます。 (mbstring.detect_order default_charset mbstring.http_output などを色々変更して試しました。) <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />も記述しています。 SJISで出力させたいファイルの保存文字コードはSJISです。 .htaccess でのフォルダ単位の指定も試したのですがダメでした。 phpファイル内に下記を記述してもダメでした。 header('content-type:text/html; charset=Shift_JIS'); 試しに $test $test2 = mb_convert_encoding($test ,'Shift_JIS' ,'UTF-8'); なども試してみたのですが、何をやってもブラウザはUTF-8と認識してしまうため文字化けしてしまいます。 apacheの設定で AddDefaultCharset は設定していません。 php.iniの設定は素人なりにですがやりつくしたと思うのですが・・・httpd.conf なのかと思って調べても見たのですがUTF-8の記述すらありませんでした。 ちなみに普通のhtmファイルの場合はmetaタグの文字コードをSJIS指定しただけで正しくSJISで表示されます。 ・・・というような状態なのですが、ブラウザにUTF-8と強制的に認識させてしまう設定はどこでされてしまっているのでしょうか? ・・・やはりphp.iniなのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯サイトで文字コード指定のメタタグは必要?

    phpで携帯サイトを作っています。 ソースコードをutf-8で作成して、表示する際にShift_JISに変換して出力しています。 ソースコード中の<head>の中には、 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> というタグを記述しています。 この、ソースコードをDreamweaverで編集したいのですが、Shift_JISで開こうとしてしまい、 文字化けしてしまいます。 コメントで先頭に以下のように記述すると、utf-8で開く、というtipsのようなものを 見つけたので、その通りにしたところ、開くときはOKです。 <?php //<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ?> ですが、保存すると、 Shift_JISで保存してしまいます。 多分、 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> というほうを認識してしまっているんだと思うのですが、そこで質問です。 携帯端末では、この指定は必須のものでしょうか? PHPからは、HTTPヘッダで文字コードも指定しているので、いらない筈だと思うのですが、 携帯ブラウザの中には、メタタグが必須のものもあるのかどうかが知りたいです。 また、Dreamweaverで、utf-8を指定して保存する方法があれば、そちらでもかまいません。 Dreamweaver は cs3(windows) を使っています。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • POSTしたデータの文字コードがutf-8になる

    ヘッダーで文字コードをSJISになるように <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> と設定し、ボディ側のformで <form method="post" action="xxxxx"> <input type="text" name="n" value=""> <INPUT type="submit" value="実行"><br /> </form> とすると、サーバ側で受け取ったname="n"がutf-8になっています。 PHPですが、受け取った文字を echo mb_convert_encoding($_POST["n"],"SJIS","utf-8"): とSJISに変換し、表示すると、文字化けなく表示可能なのですが、そのままでは文字化けてしまいます。(表示側のHTMLも文字コードは上記と同様にヘッダーで文字コードを指定しSJISにしています。) 何が悪いのでしょうか?(特殊な環境としてはchrome+jquery mobileを使用しています。) よろしくお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう