URLのパラメータにプラス符号がスペースになる問題があります(URL特殊文字)

2563 ワード

1.URL特殊文字はエスケープする必要があります2.スペースをプラス記号(+)に変更します   3.正スラッシュ(/)目次とサブ目次の区切り   4.疑問符(?)URLとクエリーを区切る   5.パーセンテージ(%)特殊文字の作成   6.番号ブックマークの指定   7.&番号区切りパラメータ  
エスケープ文字の理由:
フォームがgetメソッドでコミットされ、コミットされたパラメータに「&」などの特殊文字がある場合は、処理しないとサービス側で&の後を別のパラメータとして扱います.たとえばフォームのactionがlist.jsf?act=Go&state=5であれば、コミット時にrequest.getParameterでactとstateの値をそれぞれ取得できます.act='go&state=5'という文字列を意味する場合は、サービス側でactの正確な値を得るために、&をエスケープする必要があります.
urlエスケープ文字の原理:
これらの特殊な文字をASCIIコードに変換します.フォーマットは、%プラス文字のASCIIコード、すなわちパーセンテージ%で、対応する文字のASCII(16進)コード値に続きます.たとえば、スペースのエンコード値は「%20」です.  1.URL特殊符号及び対応する16進数値符号化:   2. 3.+  URLの+番号はスペース%2 Bを表します   4.スペースURLのスペースは+番号または符号%20で使用できます   5.ディレクトリとサブディレクトリ%2 Fを区切る    6.? 実際のURLとパラメータ%3 Fを区切る    7.%特殊文字を指定%25    8.#ブックマーク%23を表示    9.&URLで指定したパラメータ間の区切り記号%26    10.=URLで指定したパラメータの値%3 D 
解決策は以下のとおりです(+番号を例にとります).
方法1、クライアントを修正して、クライアントの"+"のパラメータの中の"+"をすべて置換しますか?「%2 B」は、パラメータがサーバ側に伝わると「+」を得ることができます.方法2、サーバー側を修正し、スペースを「+」に置き換えます.この方法はパラメータにのみ適用されますか?「+」にスペースがない場合.
例:

String a = reuqest.getParameter("clientStr").replace(' ','+'); 
クライアントがclientStr=test+OKの場合、aの値はtest+OKである.
方法3、サーバー側を修正し、パラメータを取得する方法は?reuqest.getParameterは?request.getQueryString().substring(0)を行い、得られた文字列を解析します.
例:

String a =request.getQueryString().substring(0); 
クライアントがクライアントStr=test+OKの場合、aの値は?ClientStr=test+OK、再解析が必要ですが、
a=a.?substring(10);得られたaの値は?test+OK.
添付:URLの特殊文字をエスケープするためのJS.

function URLencode(sStr) {   
return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F'); 
} 
replace()を使用する場合は、name.replaceAll("\"、"%20")を使用します.

st_fname=name.replaceAll("\\ ","%20"); st_fname=dst_fname.replaceAll("\\+","%2B"); 
本人の解決方法:
jsコード

function rStr(str){
str=str.replace(/\+/g,"%2B");
return str;
}

function SelectArcListA(fname){
 var posLeft = 10;
 var posTop = 10;
 window.open("content_select_list.asp?f="+fname+"&k="+escape(rStr(form1.tag.value)), "selArcList", "scrollbars=yes,resizable=yes,statebar=no,width=700,height=500,left="+posLeft+", top="+posTop);
}
aspエンド置換コード

keyword=replace(keyword,"%2B","+")
問題を完璧に解決する.