2016-10-19 3 views
1

PHP 5.3.3を実行していて、$str=urlencode("£")を使用している場合、$strの値は%A3です。しかし、urlencode関数をクラス内から呼び出すと、$strの値は%C2%A3になります。クラスで実行すると、PHPのurlencodeが異なる結果を返します

私はまた、関数http_build_queryで£を渡そうとしましたが、これはクラスの外側/内部で実行したときの結果と同じバリエーションです。私はこれを回避するために、str_replaceを使用して、不要なエンコーディングを取り除いて$strを取り除いていますが、なぜこれが起こっているのか本当に知りたいです。 urlencodeは、クラス内から呼び出されたときに別の文字セットを使用しているようです。

ご迷惑をおかけして申し訳ありません。

+0

ファイルのファイルエンコーディングを確認しましたか? (utf-8/iso/...)? – Bazaim

+0

"£"の実際の表現は "£"で、これに対するUTF-8ビットは '%C2%A3'です。それをチェックしました:[UTF-8エンコーディングデバッグチャート](http://www.i18nqa.com/debug/utf8-debug.html)出力がクラス内外で異なる理由については、わかりません。 – JazZ

+0

'%C2%A3'はUTF-8で、'%A3'は(おそらく)ISO 8859-1ですので、どこかでエンコーディングの不一致があります。 – simon

答えて

-1

urlencode()が異なる値を返す理由はほとんどありません。クラス内外は問題ではありません。私たちはそれを非常に簡単に排除することができます。

次のファイルtest.phpを作成します。

​​

を上記のどちらの場合もまったく同じことを印刷します。

これは、PHP、関数、または関数を使用している場所では問題ありません。

1つの値がUTF-8に格納され、1つがISO 8859-1に格納されているように見えます。

値が異なる2つの異なるエンコーディングの2つの異なる値である可能性があります。値がどこから来たのか、どのようにそこに到達したのか、どのように表示されているのか確認してください。すべての値は同じエンコードを使用していますか? UTF-8またはISO 8859-1格納されているエンコーディングは、エンコードされたソースからのものです。 htmlページ(上記のコード化されたものと同じコード化されたページでした)。

+1

Gerardに感謝します。あなたの助けを借りて、私はこのことを頭で考えました。私はスクリプトを編集するためにNotepad ++を使い、クラスを保持するファイルはUTF-8でエンコードされていましたが、クラスを呼び出すファイルはANSIとしてエンコードされていました。私のテストを通して、£記号はこれらのページのそれぞれにコード化されました - それゆえ、異なる結果! – Baz

関連する問題