処理URLパラメータに中国語パラメータURL文字列が含まれている問題

1343 ワード

URLパラメータにURL文字列が含まれている場合、その文字列には中国語も含まれています.この場合、処理が気持ち悪いので、yiがしばらく模索することでbase 64でこの問題を解決できることがわかりました.
背景:要求対象アプリケーションがJSONPをサポートしていないため、別のアプリケーションを使用して中継する必要があります.クライアントはUTF-8符号化であり、中継としてのアプリケーションはGBK符号化であり、要求が必要なターゲットアプリケーションはUTF-8符号化である.
 
一般的な考え方は次のとおりです.
フロントから転送された対応する符号化のURLは、バックグラウンドでその符号化の復号、URLDecoderを用いる.decode(params,"encodeType");
しかし、一般的なMVCフレームワークまたはアプリケーションサーバは、パラメータをバインドする過程で1回復号され、フロントでバックエンドを指定した符号化フォーマットで手動で復号するには、encodeURIComponent 2回、1回目のフレームワークまたはアプリケーションサーバ復号、2回目の手動復号が必要である
しかし、ここで発生した問題は通常ではなく、通常の方法を使うのは面倒なので、卑猥な方法を取っています.
たとえば、このようなリクエストを送信したい場合
http://localhost/mobile/getInfo.json?url=http://localhost2/mobile/getSomething.json?params=テスト
フロントJavascript:
var urlEncoded = Base64.encode(encodeURI(url));
// base64 ,encodeURI 
//Then, ... Ajax 

ここではBase 64 Javascriptライブラリ、アドレスを使用します.https://github.com/dankogai/js-base64
   
Java側の場合はbase 64で復号してencodeURI後のURIが得られ、HTTPClientで直接リクエストを送信します
 
import org.apache.commons.codec.binary.Base64;
// commons-codec , sun.misc.base64decoder

String urlRaw = request.getParameter("url");
String url = new String(Base64.decodeBase64(urlRaw.getBytes()));

//Then,  HTTPClient 
//....