2

トルコ語の文字セットを使用した rawurldecode に問題があります。

GET パラメータとして渡す必要があるトルコ語 (yeşil は緑を意味します) があります。

これが私の生成したリンクです。

search.php?renk=ye%C5%9Fil

このリンクをクリックすると、ブラウザのアドレスバーにそのように表示されます。(正常にデコードされます)

search.php?renk=yeşil

そして問題はここから。ブラウザーのアドレス バーで URL を変更し (追加の get パラメーターを追加するなど)、Enter ブラウザーを押すと、キーワードが変更され、以下のような URL が生成されます。

search.php?renk=ye%FEil

この時点以降、サーバー側のコードはパラメーターを処理せず、間違った結果を生成します。これを回避する標準的な方法はありますか?

ありがとう。

4

2 に答える 2

4

お使いのブラウザは、リンクを iso-8859-9 エンコーディングなどに変換しているようです。%FE は iso-8859-9 エンコーディングから urlencoded です。

私は試してみましたが、うまくいきましiconv("iso8859-9", "utf-8", rawurldecode("search.php?renk=ye%FEil"))た。

于 2011-08-26T11:05:42.827 に答える
0

URL は常に US-Ascii を使用しています。

RFC を参照してください: http://www.ietf.org/rfc/rfc1738.txt

対応するグラフィックがありません US-ASCII:

URL は、US-ASCII コード化文字セットの印刷可能なグラフィック文字のみで記述されます。16 進数の 80 ~ FF のオクテット
は US-ASCII では使用されず、16 進数の 00 ~ 1F および 7F のオクテットは
制御文字を表します。これらはエンコードする必要があります。

今、あなたは多くの問題に直面しています。URL をブラウザーに貼り付けると、URL フィールドが OS ロケールに依存することがあります。ブラウザによって変換される場合があります。ファイアウォールやプロキシが URL をフィルタリングする場合があります。

次の重要な質問は、Web サーバーがこれらの高い文字をどのように解釈するかということです。どのようにphpに転送しますか(ゲートウェイによって異なります)。php は URL を自動的にデコードしますが、文字数が多いとどうなりますか? php はエンコーディングを気にしません。

私の意見では、保存する唯一の解決策です。unicodestring を base64 でエンコードされた文字列にエンコードします。これは URL 内に保存されます - これは ascii であるためです。

スクリプト内でデコードして、以前に設定したエンコーディングに戻すことができます。

于 2011-08-26T11:33:19.020 に答える