http の URL 特殊文字のエスケープと解決策

はじめに: http で get リクエストを使用していますが、平文で他人に渡したくなく、暗号化後のデータには「+」記号が含まれています。

知識:送信されたパラメータに「 &」や「+」などの特殊文字が含まれている場合、それらが処理されない場合、サービス エンドは & 以降を別のパラメータとして扱います。

たとえば、  list?act=go&state=5 は、actstateの値を取得します

ただし、 act の値を"go&state=5"の文字列にしたい場合は、エスケープする必要があります(一般的な方法 2 を適宜使用できます)。

1. スペースをプラス記号 (+) に置き換えます  %2B

2. スペース URL 文字には+記号または%2Oを使用できます

3. スラッシュ ( / ) はディレクトリとサブディレクトリを区切ります   %2F

4. URL とクエリ %3F は疑問符 ( ? ) で区切られます。

5. パーセント記号 (%) は特殊文字 %25 を指定します。

6.#&23で指定されたブックマーク

7. アンパサンド %26 で区切られたパラメータ

8. = 記号でパラメータを区切ります %3D

解決:

方法 1 :サーバー側を変更し、スペースを「+」に置き換えます。この方法は、パラメーターに「+」があり、スペースがない場合にのみ適用されます

//请求接口时,客户端向服务器传递参数时,参数中的“+”会变成空格,因为URL中默认的将“+”号转义了
//例如生成的客户端链接为http://licalhost:8080/download?reqStr=sddwc+qwed+drwdef
//传到服务端后台reqStr=sddwc qwed drwdef
//服务端转换之后reqStr=sddwc+qwed+drwdef
reqStr = reqStr.replaceAll(" ","+");

方法 2:クライアントを変更し、パラメーター内のすべての「+」をクライアント側の「2B%」の「+」に置き換えて、パラメーターがサーバーに渡されるときに「+」を取得できるようにします (一般的な方法、特殊文字を転送できます)   

//java 使用
//请求接口时,客户端向服务器传递参数时,参数中的“+”会变成空格,因为URL中默认的将“+”号转义了
//例如生成的客户端链接为http://licalhost:8080/download?reqStr=sddwc+qwed+drwdef
reqStr = reqStr.replaceAll("\\+","%2B");
//此时的客户端真实链接为http://licalhost:8080/download?reqStr=sddwc%2Bqwed%2Bdrwdef
//到服务器端的reqStr=sddwc+qwed+drwdef


js使用
局部替换
var str = 'abcadeacf';
var str1 = str.replace('a', 'o');
alert(str1);  
// 打印结果: obcadeacf
全局替换 
var str2 = str.replace(/a/g, 'o');
alert(str2);  
//打印结果: obcodeocf

处理方法:
function URLencode(sStr)   
{  
    return escape(sStr).replace(/\%/g,"%25").replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');  
}

//IE8不支持escape
function URLencode(sStr)   
{  
    return sStr.replace(/\%/g,"%25").replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');  
}

方法 3:サーバー側を変更します。特殊:入力パラメータがrequestの場合は使用できますが、アノテーション メソッドで取得された reqStr の場合は使用できません。

通常、パラメータを取得するメソッドはreuqest.‍getParameterですが、この場合はrequest.getQueryString().substring(0)を使用し、取得した文字列を解析します。

String reqStr =request.getQueryString().substring(0); 
a=a.‍substring(10)

おすすめ

転載: blog.csdn.net/qq_40453972/article/details/129299892