0

1 つの Web ページにいくつかの機能を追加するグリースモンキー スクリプトを作成しています (サーバー側のコードを変更できないことは明らかです)。

これは、GBK でエンコードされた文字列のみを受信する非常に古い Web サイトです。たとえば、現在の Web ページのフォームには、値「中」が入力されたテキスト入力フィールドがあります (UTF-8 バイト ストリームでは「\u4e2d」、「%E4%B8%AD」、GBK バイト ストリームでは %D6%D0)。 、ユーザーが送信ボタンをクリックすると、ブラウザーは自動的にフォームを application/x-www-form-urlencoded テキストにシリアル化し、サーバーに投稿します。Web ページは GBK でエンコードされていると主張されているため、"中" は application/x-www-form-urlencoded テキストで "%D6D0%" として自動的にエンコードされ、サーバー側はそれを GBK エンコードでデコードして正しい値を取得します。結果。

現在、フォームをサーバーに送信するためにajaxに切り替えています(ほとんどの場合30〜40回)。JQueryのserialize()メソッドを使用してフォームをapplication / x-www-form-urlencodedテキストにシリアル化し、投稿しましたそれ。問題は、JQuery の serialize メソッドが最終的に encodeURIComponent を使用してフォームのすべての値をエンコードすることです。このとき、現在の Web ページの文字セットが GBK であるにもかかわらず、「中」は「%E4%B8%AD」としてエンコードされます。サーバー側はまだ GBK を使用してデコードし、失敗しました。

私はこれについて多くのことをグーグルで調べました.encodeURIComponentは常に文字列をutf-8ストリームとしてエンコードします.JavaScript言語では、ブラウザが自動的に行うようにシリアル化されたフォームデータを取得するという、私が望むことを実行できるユーティリティ関数はありません.

何か案は?ありがとう。

Firefox アドオンを作成し、c/c++ コードを使用して XPCOM を実装し、javascript 文字列から GBK 形式の URL エンコード文字列に変換するのはどうですか?

4

0 に答える 0