3

encodeURIcomponent現在のページの URL をサーバー側に渡し、サーバー側でurldecode文字を取得するために使用する Javascript ブックマークレットがあります。

問題は、エンコードされた文字が utf-8 ではない場合 (私の場合は gb2312 ですが、別のものである可能性があります)、サーバーが を実行するurldecodeと、デコードされた文字が正方形になります。明らかに、これはエンコード前の外観ではありません。

これはブックマークレットであり、入力は何でもかまいません。そのため、js で「gb2312 としてエンコード」を定義したり、php スクリプトで「gb2312 としてデコード」を定義したりすることはできません。

それで、encodeURIcomponent文字エンコーディングをコンテンツと一緒に渡し、デコードで正しいエンコーディングを選択してデコードできる正しい使用方法はありますか?

4

2 に答える 2

0

ブラウザのエンコーディング、特に GB2312 文字セットについては、最初に次のドキュメント (中国語) を確認してください。

あなたの場合、%C8%B7%B6%A8は実際には の GB2312 形式から生成され'\u786e\u5b9a'ます。これは通常、(レガシー?) バージョンの IE および FF で発生し、ユーザーがロケーション バーに漢字を直接入力すると、
または、IRI から URI へのエンコーディングをまったく実行せず、バイナリ文字列をレンダリングするだけのページ コンテンツからの非標準リンクを'/tag/\xc8\xb7\xb6\xa8'使用しています (以前は doban.com はタグに対してこの使用法を使用していましたが、現在は UTF8 で正しい URI エンコーディングを使用しています)。 )。Chrome では再現できないのでよくわかりませんが、おそらく FF と IE でテストしてください。

実際には、の正しい出力encodeURIComponent

> encodeURIComponent('%C8%B7%B6%A8')
  "%25C8%25B7%25B6%25A8"

したがって、サーバー側では、引用符で囲まれていない文字列にASCII以外のバイトが含まれている場合、文字列をそのままにしておくことをお勧めします'%C8%B7%B6%A8'

また、クライアント側でチェックインして、XX が より大きい場所を含む値に再度適用することもできます。ただし、これが RFC 2396 に違反しているかどうかはよくわかりません。encodeURIComponent%XX0x7F

写英文好累啊,不過还是要入乡随俗~

于 2012-04-30T10:24:28.713 に答える