urlencoder.encode、urldecoder.decode、escape、encodeuri、encoder
2969 ワード
Escape()メソッド
指定した文字列をISO Latin文字セットで符号化します.すべてのスペース記号、句読点、特殊文字、およびその他の非ASCII文字は、%xx形式の文字符号化に変換されます(xxは、文字セットテーブル内の文字の符号化の16進数に等しい).たとえば、スペース記号に対応する符号化は%20であり、中国語の場合、unicode符号化フォーマットは%uxxxxのように使用される.unescapeメソッドはこれとは逆です.この方法で符号化されない文字は69個あります:@*+-./,0-9,a-z,A-Z
EncodeURI()メソッド
URI文字列をUTF-8符号化形式でescape形式の文字列に変換する.encodeURI符号化されていない文字は82文字あります:~!@#$&*()_+:?-=;',./,0-9,a-z,A-Z
EncodeURIComponent()メソッド
URI文字列をUTF-8符号化形式でescape形式の文字列に変換する.この方法は、encodeURI()に比べて、/などの文字など、より多くの文字を符号化する.したがって文字列にURIのいくつかの部分が含まれている場合、この方法で符号化することはできません.そうしないと、/文字が符号化された後にURLにエラーが表示されます.このメソッドで符号化されない文字71文字:~!*()_-'.,0-9,a-z,A-Z
POST方式での特殊文字変換
フォームがPOSTで提出されると、フォーム要素の値の一部の文字も変換されますが、以下は変換されません:+@*-.、a-z A-Z 0-9は、変換する文字をブラウザの符号化方式で時行符号化し、その後、符号化を%xx(xxは2桁の16進数)形式のパラメータ列に変換してサーバに転送する.
JavaのURLEncoder.encode(String s, String enc)/URLDecoder.decode(String s,String enc)符号化方式
JavaのURLEncoder.encode(String s, String enc)/URLDecoder.decode(String s,String enc)メカニズム:JavaScriptのencodeURI、encodeURIComponent関数とは符号化方式が異なります.encodeURI、encodeURIComponentはUTF-8で変更できません.しかしJavaのコーデック関数はUTF-8とは限らず、ここでの符号化は実行環境と関係があり、デフォルトではTomcat 5.5ではISO 8859-1でURLに伝達するパラメータを復号するが、URLの符号化方式を設定することも可能である、例えばTomcatでURIEncodingとuseBodyEncodingForURI属性を設定することは可能であり、具体例としては『HTTPコードストリームとJsp乱符号化問題の解析(一)』のURLEncoderを参照する.Encode()セクション.
URLEncoder.Encode(String s,String enc)は、Stringを符号化する場合、以下のルールを使用します.
アルファベット文字「a」から「z」、「A」から「Z」、「0」から「9」は変わらない.
特殊文字「.」、「-」、「*」、「」変わらない.
スペース文字「」はプラス記号「+」に変換されます.
他のすべての文字は安全ではないので、まずいくつかの符号化メカニズムを使用して1バイト以上に変換します.各バイトは、3文字を含む文字列「%xy」で表され、xyはそのバイトの2桁の16進数で表される.推奨される符号化機構はUTF-8である.ただし、互換性の観点から、符号化が指定されていない場合は、対応するプラットフォームのデフォルト符号化が使用される.
例えば、UTF-8符号化機構を使用すると、文字列「The stringü@foo-bar」は、UTF-8では2バイト、C 3(16進数)およびBC(16進数)に符号化され、文字@は1バイト40(16進数)に符号化されるため、「The+string+%C 3%BC%40 foo-bar」に変換される.
URLDecoder.decode(String s,String enc)変換プロセスはURLEncoderクラスで使用されるプロセスとは正反対である.符号化された文字列のすべての文字は、「a」から「z」、「A」から「Z」、「0」から「9」および「-」、「_」のいずれかであると仮定します.「.」および「*」.「%」文字は許可されますが、特殊なエスケープシーケンスの開始として解釈されます.
変換では、次のルールが使用されます.
アルファベット文字「a」から「z」、「A」から「Z」、「0」から「9」は変わらない.
特殊文字「.」、「-」、「*」、「」変わらない.
プラス記号「+」をスペース文字「」に変換します.
「%xy」形式のシーケンスは1バイトとみなされ、xyは8ビットの2ビット16進数で表されます.その後、1つ以上のバイトシーケンスを連続的に含むすべてのサブ文字列は、その符号化によってこれらの連続バイトを生成することができる文字に置き換えられる.これらの文字を復号する符号化メカニズムを指定したり、指定しない場合はプラットフォームのデフォルトの符号化メカニズムを使用したりすることができます.
注意:以下のコードのCookieに中国語を書き込むにはまずURLEncoderを必要とします.Encode符号化は、Cookieの読み出し時にURLDecoderを用いる.decode符号化後に中国語に変換
指定した文字列をISO Latin文字セットで符号化します.すべてのスペース記号、句読点、特殊文字、およびその他の非ASCII文字は、%xx形式の文字符号化に変換されます(xxは、文字セットテーブル内の文字の符号化の16進数に等しい).たとえば、スペース記号に対応する符号化は%20であり、中国語の場合、unicode符号化フォーマットは%uxxxxのように使用される.unescapeメソッドはこれとは逆です.この方法で符号化されない文字は69個あります:@*+-./,0-9,a-z,A-Z
EncodeURI()メソッド
URI文字列をUTF-8符号化形式でescape形式の文字列に変換する.encodeURI符号化されていない文字は82文字あります:~!@#$&*()_+:?-=;',./,0-9,a-z,A-Z
EncodeURIComponent()メソッド
URI文字列をUTF-8符号化形式でescape形式の文字列に変換する.この方法は、encodeURI()に比べて、/などの文字など、より多くの文字を符号化する.したがって文字列にURIのいくつかの部分が含まれている場合、この方法で符号化することはできません.そうしないと、/文字が符号化された後にURLにエラーが表示されます.このメソッドで符号化されない文字71文字:~!*()_-'.,0-9,a-z,A-Z
POST方式での特殊文字変換
フォームがPOSTで提出されると、フォーム要素の値の一部の文字も変換されますが、以下は変換されません:+@*-.、a-z A-Z 0-9は、変換する文字をブラウザの符号化方式で時行符号化し、その後、符号化を%xx(xxは2桁の16進数)形式のパラメータ列に変換してサーバに転送する.
JavaのURLEncoder.encode(String s, String enc)/URLDecoder.decode(String s,String enc)符号化方式
JavaのURLEncoder.encode(String s, String enc)/URLDecoder.decode(String s,String enc)メカニズム:JavaScriptのencodeURI、encodeURIComponent関数とは符号化方式が異なります.encodeURI、encodeURIComponentはUTF-8で変更できません.しかしJavaのコーデック関数はUTF-8とは限らず、ここでの符号化は実行環境と関係があり、デフォルトではTomcat 5.5ではISO 8859-1でURLに伝達するパラメータを復号するが、URLの符号化方式を設定することも可能である、例えばTomcatでURIEncodingとuseBodyEncodingForURI属性を設定することは可能であり、具体例としては『HTTPコードストリームとJsp乱符号化問題の解析(一)』のURLEncoderを参照する.Encode()セクション.
URLEncoder.Encode(String s,String enc)は、Stringを符号化する場合、以下のルールを使用します.
アルファベット文字「a」から「z」、「A」から「Z」、「0」から「9」は変わらない.
特殊文字「.」、「-」、「*」、「」変わらない.
スペース文字「」はプラス記号「+」に変換されます.
他のすべての文字は安全ではないので、まずいくつかの符号化メカニズムを使用して1バイト以上に変換します.各バイトは、3文字を含む文字列「%xy」で表され、xyはそのバイトの2桁の16進数で表される.推奨される符号化機構はUTF-8である.ただし、互換性の観点から、符号化が指定されていない場合は、対応するプラットフォームのデフォルト符号化が使用される.
例えば、UTF-8符号化機構を使用すると、文字列「The stringü@foo-bar」は、UTF-8では2バイト、C 3(16進数)およびBC(16進数)に符号化され、文字@は1バイト40(16進数)に符号化されるため、「The+string+%C 3%BC%40 foo-bar」に変換される.
URLDecoder.decode(String s,String enc)変換プロセスはURLEncoderクラスで使用されるプロセスとは正反対である.符号化された文字列のすべての文字は、「a」から「z」、「A」から「Z」、「0」から「9」および「-」、「_」のいずれかであると仮定します.「.」および「*」.「%」文字は許可されますが、特殊なエスケープシーケンスの開始として解釈されます.
変換では、次のルールが使用されます.
アルファベット文字「a」から「z」、「A」から「Z」、「0」から「9」は変わらない.
特殊文字「.」、「-」、「*」、「」変わらない.
プラス記号「+」をスペース文字「」に変換します.
「%xy」形式のシーケンスは1バイトとみなされ、xyは8ビットの2ビット16進数で表されます.その後、1つ以上のバイトシーケンスを連続的に含むすべてのサブ文字列は、その符号化によってこれらの連続バイトを生成することができる文字に置き換えられる.これらの文字を復号する符号化メカニズムを指定したり、指定しない場合はプラットフォームのデフォルトの符号化メカニズムを使用したりすることができます.
注意:以下のコードのCookieに中国語を書き込むにはまずURLEncoderを必要とします.Encode符号化は、Cookieの読み出し時にURLDecoderを用いる.decode符号化後に中国語に変換
<%
String name = "css ";
Cookie ck = new Cookie(URLEncoder.encode("username"),URLEncoder.encode(name));
ck.setMaxAge(24*1000);
response.addCookie(ck);
out.println(" Cookie ");
Cookie[] cookies = request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("username"))
{
out.println(URLDecoder.decode(c.getValue()));
}
}
%>