Js は URL をどのように使用して、文字化けした中国語パラメータをバックグラウンドに渡すのでしょうか?

一个新手
リリース: 2017-09-22 10:23:43
オリジナル
2177 人が閲覧しました

フロントエンドがバックエンドの対応する URL をリクエストするときに、バックエンドにパラメーターを渡すために URL でこの URL を使用することがよくありますが、パラメーターが中国語の場合、文字化けの問題が発生します。 URL にパラメータを渡す際の文字化けの問題を解決する方法を詳しく説明するシナリオを考えてみましょう。


ページに入力ボックスと送信ボタンがあるとします。送信ボタンをクリックすると、ユーザーが入力ボックスに入力した値を取得し、URL を使用してパラメータを渡します。入力ボックスの値を渡すには バックステージに戻ります。 Web 層処理技術に相当するバックグラウンドではデータ処理に Struts2 アクションを使用すると仮定し、アクションで処理されるデータの URL が /say であると仮定します。特定のページの緊急リクエストのアクション コードは次のとおりです:

html コード:


<input type="text" id="name" name="name" value="${user.name}" />
<button id="sub" onclick="sub()">提交</button>
javascript代码:
<script type="text/javascript">
function sub(){
var name = document.getElementById("name").value;①
 window.location = "sayHello?user.name=" + name;②
}
</script>
ログイン後にコピー

上記のコードは、最初に name の ID を持つ入力ボックスから入力ボックスの値を取得し、次に window.localtion を使用してここで、sayHello の URL を使用してアクションをリクエストします。アクションの後、key=value の形式が使用され、受信パラメーターが使用され、受信入力ボックスの値が Struts2 メカニズムに従って使用され、name 属性が更新されます。背景のユーザーエンティティ

URL エンコードとデコードの原則:

URL を使用してパラメータを渡す方法はブラウザ環境に依存するため、つまり、URL と、URL に含まれる各 key=value 形式のキーと値のペアのパラメータは次のようになります。ブラウザのアドレス バーの処理原理は、対応するエンコードを処理し、デコードのためにバックグラウンドに渡します。

何も処理を行っていないため、JavaScriptがURLをリクエストして中国語のパラメータを渡すとき(つまり、入力ボックスに中国語が入力されたとき)、URLの中国語パラメータはブラウザの仕組みに従ってエンコードされます。現時点では、エンコードの文字化けの問題が発生しています。

入力ボックスに入力された内容が「test」という単語で、バックグラウンドアクションが受け取ったパラメータ値が文字化けしているとします。 JavaScript でエンコードするには、encodeURI() メソッドを使用します。

1. encodeURI()を使用してJavaScriptで中国語のURLパラメータをエンコードすると、単語「test」は「%E6%B5%8B%E8%AF%95」に変換されます

2. 「%」はエスケープ文字とみなされ、ブラウザはアドレス バー URL に渡された変換されたパラメータ「%」と「%」の間のエスケープ文字を処理し、バックグラウンド アクションに渡します。これにより、encodeURI() によってエンコードされた実際の URL との不一致が生じます。これは、ブラウザーが「%」をエスケープ文字と誤って認識し、「%」を通常の文字として認識しないためです。

3. encodeURI()で変換されたURLがブラウザで正常に処理されるためには、encodeURI()でエンコードされたRULを外層のencodeURI()で再度処理する必要があります。この処理 encodeURI() は、ブラウザでエスケープ文字として解析されたエンコードされた URL 内の「%」を再エンコードし、通常の文字に変換します。

4. 通常の処理の後、前の JavaScript コードの②のコードは次のようになります。

window.location = encodeURI(encodeURI("sayHello?user.name=" + name));

5. 処理された URL は、一度 encodeURI() によって変換された文字列ではなくなり、代わりに、文字列「%25E6%B255%258B%25E8%AF%2595」は、前のステップで 2 層の encodeURI() 処理を行った後、参照および解析された元の文字列を再エンコードすることによって、URL によって処理されます。エスケープ文字「%」は再度エンコードされ、通常の文字「%25」に変換されます。 この時点で、フロントエンド JavaScript コードは、中国語文字による URL のエンコードを完了し、URL を介してパラメーターをバックグラウンド アクションに渡し、処理を待機します。アクションは正常な変換を取得し、パラメーターの文字化けはありませんでした。

% 25E6%B255%258B%25E8%AF%2595”、この文字列に対応する中国語は、まさに私たちが入力した単語「test」です。 そのような文字列は、フロントエンドによって入力されたソースデータ「テスト」ではなく、encodeURI() によって 2 回エンコードされた文字列であるため、

アクションは処理できません。したがって、バックエンドで API を使用して、フロントエンドによってエンコードされたパラメーター文字列をデコードする必要があります。対応するデコード API は URLDecoder.decode(user.getName(), "UTF-8") です。

URLDecoder の decode(String str, String ecn) メソッドには 2 つのパラメーターがあります。最初のパラメーターはデコードされる文字列で、2 番目のパラメーターはデコード時に対応するエンコーディングです。バックグラウンドでこの API を使用してデコードするために使用するコードは次のとおりです:

URLDecoder.decode(user.getName(),"UTF-8");

概要:

この時点で次のようになります。 URL の完成バックグラウンドで、フロントエンドの encodeURI() によってエンコードされた文字列を取得し、

decode(String) を使用します。 str, String ecn) メソッドをデコードします

以上がJs は URL をどのように使用して、文字化けした中国語パラメータをバックグラウンドに渡すのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート