2011-12-16 6 views
4

私のサイトでエンコードに問題があります。

これは私がしているコードanalize.php?dialog=árbolに行けば、今の私の問題である。その上

<? 
echo $_GET['dialog']; 
echo "sabía"; 

私が手:

sabía 
sabía 

私はUTF-8に変更し、ANSIを使用しています両方を破る。私はなぜこれが起こるか、またこれ以上のコードはないことを理解していません。このファイルはデータベースからデータを取得するためにのみ使用されるため、表示方法については気にしません。しかし、$_GETを正しく表示させる必要がありますので、クエリに含めることができます。

どうすればいいですか?

+3

http://pokit.org/get/7570f6e4406588d65f28ffb3c50c4224.png –

+1

?ファイルを解釈/提供するエンコーディングは何ですか? – deceze

+0

あなたはutf_encode()とutf8_decode()を試したことがありますか?あなたが持っているかのように聞こえますが、ちょうど – SuitedSloth

答えて

5

あなたは、URLはASCII文字セットのサブセットを使用する必要があり、URLに文字「私」を送信することはできません。したがって、URLはサーバーに送信される前にブラウザによって?dialog=sab%C3%ADaにエンコードされます。 %C3%ADは、2バイトのC3 ADを表します。これは、文字「í」のUTF-8エンコーディングです。これはvar_dump($_SERVER['QUERY_STRING']);で確認できます。これはPHPによって自動的にデコードされ、その結果、「sabía」のUTF-8バイトシーケンスが生成され、「í」は2バイトのC3 ADを使用してエンコードされます。

あなたのブラウザは、Windows 1252またはISO-8859-1文字セットを使用して、このバイトシーケンスを解釈しています。 C3バイトはこのエンコーディングで "Ã"を表し、バイトADはソフトハイフンを表し、不可視です。

2つの解決策:

  1. 使用はUTF-8どこでも(推奨!)

    • はUTF-8
    • 出力とブラウザを強制的にヘッダをあなたのソースコードを保存しますサイトをUTF-8と解釈してください。

  2. は、Windows 1252/ISO-8859-1へ$_GET値を変換(またはあなたのサイト上で使用したいものは何でもエンコーディング)この場合であっても(推奨されません)mb_convert_encodingまたはiconv

    • を使用します正確にあなたが要するに

を使用している、あなたはどこでも同じエンコーディングを使用していることを確認し、どのようなエンコーディングまさにそのブラウザに指定する必要がどのようなエンコーディングブラウザにアナウンスするヘッダーを設定する必要がありますです。ソースコードのように保存されているどのようなエンコーディング

+0

よく置いてください。私は_encodings_についてあなたの記事を終えました。優れた読書! +1 –

関連する問題