hrefパラメータ転送における中国語の文字化けについて

hrefパラメータ転送における中国語の文字化けについて

パラメータを渡すために href が必要で、パラメータが中国語の場合、文字化けした文字が表示されます。最も簡単な方法は次のとおりです。

渡された値は、まずescape()で暗号化され、次に値アクセスページでunescape()で復号化されます。これはテスト済みで、効果的です。

オンラインで調べたところ、暗号化にはurlencodeが、復号化にはurldecodeが使用できることがわかりました。

えっと...この 2 つの違いは何でしょうか? 確認して整理してみました。ソース (http://www.cnblogs.com/glory-jzx/archive/2013/06/14/3135580.html):

js には、テキストをエンコードするための 3 つの関数 (escape、encodeURI、encodeURIComponent) と、それに対応する 3 つのデコード関数 (unescape、decodeURI、decodeURIComponent) が含まれています。

1.パラメータを渡すときは、結合された URL が # などの特殊文字によって切り捨てられないように、encodeURIComponent を使用する必要があります。
たとえば、次のようになります: <script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u= +encodeURIComponent("http://cang.baidu.com/bruce42")+">Quit< /a>');</script>

>2. URLをリダイレクトする場合、encodeURIを全体として使用できます。
例: Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3. jsがデータを使用する場合はエスケープを使用できます
例: コレクション内の履歴レコード。

4. escape が 0-255 以外の Unicode 値をエンコードする場合、出力は %u**** 形式になります。それ以外の場合は、escape、encodeURI、encodeURIComponent のエンコード結果は同じです。

5.最もよく使用されるのは encodeURIComponent です。これは、中国語や韓国語などの特殊文字を utf-8 URL エンコーディングに変換します。したがって、 encodeURIComponent を使用してバックグラウンドにパラメータを渡す必要がある場合は、バックグラウンドのデコードが utf-8 をサポートしている必要があります (フォーム内のエンコーディング方法は、現在のページのエンコーディング方法と同じです)。

6. エンコードなし:

エスケープ文字は 69 個あります: *、+、-、.、/、@、_、0-9、az、AZ

encodeURI でエンコードされない文字は 82 個あります: !、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0-9、az、AZ

encodeURIComponent は 71 文字をエンコードしません: !、'、(,)、*、-、.、_、~、0-9、az、AZ

escape() と encodeURI() の違いは何ですか?

escape() メソッド:
すべてのスペース、句読点、アクセント付き文字、およびその他の非 ASCII 文字は、「%XX」としてエンコードされます。ここで、xx は 16 進数です。
escapeとunescapeのエンコードとデコード関数では、escapeはISOラテン文字セットの16進エンコードを返します。unescape関数は、特別な値を持つ16進エンコードをASCII文字列に変換します。
例:
エスケープ('!@#$%^&*(){}[]=:/;?+\'"'):
結果:%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22

encodeURI() メソッド
Encodeuri メソッドは、エンコードされた URIを返します。したがって、結果に対して Decodeuri メソッドを使用すると、元の文字列が返されます。Encodeuri メソッドは、次の文字をエンコードしません: "、"/"、";"、"?"。ただし、EncodeuriComponent メソッドを使用してこれらの文字をエンコードできます。
エンコードでは、Uniform Resource Identifier (URI) が特定の文字を 1 つずつ置き換え、UTF-8 エンコードの特性を表します。
例えば:
エンコードURI('!@#$%^&*(){}[]=:/;?+\'"'):
結果:!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+'%22

encodeURIComponent() メソッド:
encodeuricomponent メソッドはエンコードされた URI を返します。そのため、decodeuricomponent を呼び出すと、元の文字列が返されます。すべてのテキストは encodeuricomponent メソッドによってエンコードされるため、文字列に「/FOLDER1/FOLDER2/DEFAULT.HTML」などのパスが含まれている場合は注意してください。エンコードは機能せず、Web サーバーへのリクエストとして使用した場合に失敗します。文字列が複数の URI で構成されている場合は、Encodeuri メソッドを使用します。
例: 最も簡単な方法は、これらの文字を暗号化した後に生成されるコードを確認することです。
URIコンポーネントをエンコードします('!@#$%^&*(){}[]=:/;?+\'"'):
結果!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B'%22

【どの方法をいつ使うのが適切か?】

escape() メソッドは暗号化を行わず、サーバー側およびフォーム フィールドではスペースとして解釈されます。このように短縮されるため、可能であればこのメソッドの使用は避けてください。2 つのうちどちらかを選択する必要がある場合は、常に encodeURIComponent() を使用することをお勧めします。

escape() は暗号化しません: @*/+

encodeURI() は escape() よりも少し特殊で、URI をエンコードするために使用されます。1 つは URL の一部であるクエリ文字列の反対です。文字列を URI リソース識別子に変換し、特定の文字をエンコードせずに残しておく必要がある場合に、このメソッドを使用します。' 文字は URI に含まれているため、エンコードされないことに注意してください。

encodeURI() は暗号化しません: !@#$&*()=:/;?+'

最後に、encodeURIComponent() メソッドは、単一の URI コンポーネントをエンコードする必要がある場合に、ほとんどの場合に使用されます。このメソッドは、ほとんどのコンポーネントを含めることができるように、URI に特有の特定の文字をエンコードできます。' 文字自体は URI に含まれているため、このメソッドではエンコードされないことに注意してください。

encodeURIComponent() は暗号化しません: !*()'
http://shijian0306.javaeye.com/blog/241264

私はエスケープしか使っていないので、参考程度に。

上記のhrefパラメータの渡し方における中国語の文字化け問題に関する記事は、エディターが皆さんに共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

オリジナルURL: http://www.cnblogs.com/zhangym118/archive/2016/07/05/5644915.html

<<:  Vue+Echart 棒グラフで疫病データ統計を実現

>>:  HTMLはBaidu百科事典のナビゲーションドロップダウンメニュー機能を模倣します

推薦する

HTML テーブルタグチュートリアル (25): 垂直配置属性 VALIGN

垂直方向では、行の配置を上、中央、下に設定できます。基本的な構文<TR VALIGN=&quo...

Tencent Cloud で HTTPS を無料で導入する方法

最近、WeChatアプレットを書いていたとき、WeChatアプレットではすべてのリクエストインターフ...

Windows 環境での MYSQL5.7 設定ファイルの場所のグラフィカル分析

1. MYSQLインストールディレクトリ次のようにコードをコピーします。 select @@bas...

Mysql テーブルで利用可能な最小 ID 値を照会する方法

今日、研究室のプロジェクトを見ていたとき、私にとって「難しい」問題に遭遇しました。実は、それは私があ...

CSS シャドウ効果の比較: ドロップシャドウとボックスシャドウ

Drop-shadow と box-shadow はどちらも影効果(ハロー効果)のための CSS プ...

LinuxのCPU負荷とCPU使用率の詳細な説明

CPU 負荷と CPU 使用率これらは両方とも、ある程度、マシンの忙しさを反映できます。 CPU 使...

TypeScript名前空間の説明

目次1. 定義と使用1.1 定義1.2 使用2. 複数のファイルに分割する3. エイリアス序文: T...

jsはフォーム検証機能を実装します

この記事の例では、フォーム検証機能を実装するためのjsの具体的なコードを参考までに共有しています。具...

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...

ウェブ開発者やデザイナーにとって欠かせないオンラインウェブツールとアプリケーション

これまでの記事で、フロントエンド開発者にとって必須のツール、スクリプト、リソースのコレクションを紹介...

Docker で LNMP 環境を素早く構築する方法 (最新)

序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

フロア効果を実現するためのJavaScript

この記事では、フロア効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...

Founder フォント ライブラリの中国語と英語のファイル名比較表

Founder Type Library は、Founder Type Library ビジネス チ...