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百科事典のナビゲーションドロップダウンメニュー機能を模倣します

推薦する

Docker swarm を使用して Nebula Graph クラスターを迅速にデプロイする方法のチュートリアル

1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...

Linuxの簡単な分析でファイアウォールの状態と外部に開いているポートの状態を確認する

1. ファイアウォールの状態を確認するファイアウォールのステータスを確認する systemctl s...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

ウェブページでグレーまたはブラックモードを実現するための CSS3 フィルターコード

フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...

MySQL テーブル全体の暗号化ソリューション keyring_file の詳細な説明

例示するMySql Community Edition は、5.7.11 以降、テーブルベースのデー...

MySqlを最適化するためにnot inを使用する方法

最近、プロジェクトで選択クエリを使用する際に、未使用の主キー ID を除外するために not in ...

Linux 脆弱性スキャンツール lynis の使用分析

はじめに: Lynis は、徹底的なセキュリティ スキャンを実行できる Unix システム用のセキュ...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

Dockerは複数のポートマッピングコマンドを有効にします

次のように: docker run -d -p 5000:23 -p 5001:22 --name ...

Ubuntu システムにおけるネットワーク構成ファイルの分析と説明

今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...

mysql-canal-rabbitmq のインストールと展開の非常に詳細なチュートリアル

目次1.1. MySQL binlog を有効にする1.2. RabbitMQ の交換とキューを構成...

W3C チュートリアル (8): W3C XML スキーマのアクティビティ

XML スキーマは、DTD に代わる XML ベースのものです。 XML スキーマは、DTD に代わ...

Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。

かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...

CSSポジションの5つの異なる値の使い方の詳細な説明

位置プロパティposition プロパティは、要素に使用する配置方法のタイプ (静的、相対的、固定、...