2012-03-24 7 views
1

PHPスクリプトを実装しました。
PHPスクリプトを次のURLで実行します:http://server/script.php?param1=%80t%80PHP +文字エンコード+ GETパラメータ

PHPスクリプトにGETパラメータを渡します。
パラメータの名前はparam1です。
param1には、 "%80t%80"というURLエンコード文字列 "€t€"が含まれています。

私のPHPスクリプトは、UTF-8標準でエンコードされています。
$ _GET ["param1"]に含まれる文字列にどの文字エンコーディングが当てはまるのでしょうか。

$ _GET ["param1"]の文字エンコードがUTF-8でないことを確認してください。
理由:私のPHPスクリプトの次のコマンドは、$ _GET ["param1"]の16進表現である "80 74 80"となります。 $ _GET [ "のparam1"]の文字エンコーディングがUTF-8だった場合

var_dump(unpack("H*", $_GET["param1"])); 

は、前のPHPのコマンドは、 "E2 82 AC 74 E2 82 AC" につながります。

$ _GET ["param1"]の文字エンコーディングは、ISOシンボルがIS0-8859-1文字セットに含まれていないため、ISO-8859-1ではありません。
ISO-8859-1のエンコーディングテーブルを表示するにはhttp://en.wikipedia.org/wiki/ISO/IEC_8859-1
したがって、mb_internal_encoding関数によって返されるPHP内部エンコーディングは、IS0-8859-1であるため$ _GET ["param1"]には適用されません。

誰かが$ _GET ["param1"]に含まれる文字列に適用される文字エンコーディングを知っていますか?

+0

を使用していますか? – Andreas

答えて

0

解決しようとしている文字エンコーディングの問題に対処しようとしているときに、なぜアンパックを使用しているのか分かりません。だからここでは、私はあなたが$ _GETの値を読み取ろうとしているとし

...行く[ 'のparam1']のようなもので:

$ VAR = $ _GET [ 'のparam1']; urldecode $ var = urldecode($ _GET ['param1'])を試して、マルチバイト文字列を処理する関数を使用することをお勧めします。http://gr.php.net/manual/en/ref.mbstring.php またはiconv関数を使用してください。

上記が役に立ちますようお願いいたします。

+0

私はテスト目的のためだけにアンパック機能を使用しました。私はparam1に含まれる文字列を表すバイトを見る必要がありました。最後の目標は、GETパラメータから受け取った各文字列をUTF-8でエンコードすることです。私はmb_convert_encoding PHP関数を使用する予定ですが、GET配列の文字列を表すために最初にどのエンコーディングが使われているかを知る必要があります。 – user1139666

0

$ _GET ["param1"]の文字エンコードがUTF-8でないことを確認してください。 理由:PHPスクリプトの次のコマンドは、 "80 74 80" となります。これは$ _GET ["param1"]の16進表現です。

これはあなたが書いたものなので、これはまさにあなたが期待するものです。パラメータ%80t%80は3文字を意味します:hex 80、 "t"、hex 80.%80は "hex 80"を意味します。あなたは手動で特定の16進値を指定しています。文字エンコーディングはこれにまったく入っていません。

これを試してみてください:

var_dump(unpack ("H*", urldecode("%80t%80"))); 

そして、これを:なぜアンパックあなたを

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac 
関連する問題