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

推薦する

Linux rpm および yum コマンドとその使用法の詳細な説明

RPM パッケージ管理インターネット ダウンロード パッケージのパッケージ化およびインストール ツー...

純粋な CSS で「テキストオーバーフローの切り捨てと省略」を実装するいくつかの方法

私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...

ソースコード分析からTomcatがサーブレットの初期化を呼び出す方法の詳細な説明

目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...

CSS の 6 つの重要なセレクター (3 秒で覚える)

出典: https://blog.csdn.net/qq_44761243/article/deta...

Vueはログインタイプの切り替えを実装します

この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...

Linux環境でOpenSSL証明書を生成する

1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...

VMware Workstation Pro 16 グラフィックチュートリアル (CentOS8 仮想マシン クラスタの構築)

目次準備VMware Workstation Pro 16 をインストールするLinux仮想マシンの...

Ubuntuのpython3でvenvを使用して仮想環境を作成する

1. 仮想環境はプロジェクトに従い、単一のプロジェクト用の仮想環境を作成します(Python 3.4...

グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...

さまざまなマウスの形状を表現する方法

<a href = "http://" style = "cur...

MySQL スローログ実践のまとめ

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

Vue ページレンダリングにおけるキーの適用例チュートリアル

導入フロントエンドプロジェクトの開発プロセスでは、el-table によって表示される結果列がコンポ...

VirtualBoxにOpenSuseをインストールする方法

仮想マシンはホストマシンにインストールされます。 CPU とメモリはホスト マシンと共有する必要があ...

VMware 仮想マシンに Centos7.3 をインストールするチュートリアル図

VMware の準備 CentOS の準備、こちらは CentOS 7.3 CentOS-7-x86...