日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java 转码%2f%_JS和JAVA中常用的编码转码函数

發布時間:2023/12/1 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 转码%2f%_JS和JAVA中常用的编码转码函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

js中escape,encodeURI,encodeURIComponent函數和unescape,decodeURI和decodeURIComponent函數的功能

1.escape方法對String對象編碼,escape方法返回一個包含了"轉義序列"的字符串值。

除了ASCII字母和數字,以及這幾個符號 *+-/.@_外(共有10+52+7=69個字符不會被編碼),

其他所有的字符都會被轉義序列替換,標準ASCII碼內的字符(0-127)和擴展的ASCII碼內

的字符(128-255)都用%xx編碼形式代替。字符值大于255的以unicode%uxxxx格式存儲。

注意 :escape方法不能夠用來對統一資源標示符URI進行編碼,因為=&?#等會被編碼.

對URI編碼應使用encodeURI,對URI參數用encodeURIComponent方法。

encodeURI除了ASCII字母和數字,以及這幾個符號 *+-/.@_!#$&\'(),:=?~外(共有10+52+20=82個字符不會被編碼),

其他所有的字符都會被轉義序列替換,標準ASCII碼內的字符(0-127)和擴展的ASCII碼內

的字符(128-255)都用%xx編碼形式代替。字符值大于255的以utf-8多字節%xx格式存儲。

在URI中有特殊意義的字符如?=&等不會被編碼。

encodeURIComponent除了ASCII字母和數字,以及這幾個符號 *-_.~!'()外(共有10+52+9=71個字符不會被編碼),

其他所有的字符都會被轉義序列替換,標準ASCII碼內的字符(0-127)和擴展的ASCII碼內

的字符(128-255)都用%xx編碼形式代替。字符值大于255的以utf-8多字節%xx格式存儲。

可以看到?=&等在URI中有特殊意義的字符也會被編碼。

encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最常用的,

它可以將參數中的中文、特殊字符進行轉義,而不會影響整個URL。

一個測試的JSP實例:

utilits:

function writeToDom(str){

document.writeln(str);

}

function writelnToDom(str){

document.writeln(str + "
");

}

function writeURL(type,str){

document.writeln(type +":" + str + "
");

}

test encoding decoding

request.setCharacterEncoding("utf-8");

String param = request.getParameter("param");

System.out.println("original " + param);

String urlEncodedparam = URLEncoder.encode("param=中文value>123NXX*+-/.@_!#$&\'(),:=?~YES>^","UTF-8");

out.write("server side output -------------------------------------------------------? ");

out.write("
original param: " + param);

out.write("
decoded from original param: " + URLDecoder.decode(request.getParameter("param"),"UTF-8"));

%>

writelnToDom("
client side output---------------------------------------------");

var scriptVar='encdec.jsp?param=中文value>123NXX*+-/.@_YES

writeURL("escape",escape(scriptVar));

var enuri='encdec.jsp?param=中文value>123NXX*+-/.@_!#$&\'(),:=?~YES>^';

writeURL("encodeURI",encodeURI(enuri)); //只有這個做法的URL最終可用被正確訪問

var enuricomp='encdec.jsp?param=中文value>123NXX*-_.~!\'()YES>^';

writeURL("encodeURIComponent",encodeURIComponent(enuricomp));

writeURL("URLEncoder","");

writeURL("response encodeurl","");

writeURL("plain url","encdec.jsp?param=中文value&other=abcd");

writelnToDom("unescape URLEncoder:" + unescape(""));

writelnToDom("decodeURI URLEncoder:" + decodeURI(""));

writelnToDom("decodeURIComponent URLEncoder:" + decodeURIComponent(""));

訪問http://localhost:8080/prjWebSec/encode/encdec.jsp?param=中文value>123NXX*+-/.@_!#$&'(),:=?~YES>^

輸出為

server side output -------------------------------------------------------

original param: 中文value>123NXX* -/.@_!

decoded from original param: 中文value>123NXX* -/.@_!

client side output---------------------------------------------

escape:encdec.jsp%3Fparam%3D%u4E2D%u6587value%3E123NXX*+-/.@_YES%3C%5E

encodeURI:encdec.jsp?param=%E4%B8%AD%E6%96%87value%3E123NXX*+-/.@_!#$&'(),:=?~YES%3E%5E

encodeURIComponent:encdec.jsp%3Fparam%3D%E4%B8%AD%E6%96%87value%3E123NXX*-_.~!'()YES%3E%5E

URLEncoder:param%3D%E4%B8%AD%E6%96%87value%3E123NXX*%2B-%2F.%40_%21%23%24%26%27%28%29%2C%3A%3D%3F%7EYES%3E%5E

unescape URLEncoder:param=??-???value>123NXX*+-/.@_!#$&'(),:=?~YES>^

decodeURI URLEncoder:param%3D中文value>123NXX*%2B-%2F.%40_!%23%24%26'()%2C%3A%3D%3F~YES>^

decodeURIComponent URLEncoder:param=中文value>123NXX*+-/.@_!#$&'(),:=?~YES>^可以看到escape和encodeURIComponent都會將? =等在URI中有特殊意義的字符進行了編碼.

這樣的話,URL就不能被正常訪問了.

[如果你是在tomcat中測試的話,需要在server.xml中加上

URIEncoding="UTF-8"/>] 2.unescape方法,解碼用escape方法進行了編碼的String對象。 unescape方法返回一個包含charstring內容的字符串值。 所有以%xx十六進制形式編碼的字符都用ASCII字符集中等價的字符代替。 以%uxxxx格式(Unicode字符)編碼的字符用十六進制編碼xxxx對應的Unicode字符代替. 注意:unescape方法不能用于解碼統一資源標識碼(URI)。escape和unescape以經不推薦使用。 解碼encodeURI和encodeURIComponent編碼過的內容用decodeURI和decodeURIComponent方法。 JAVA代碼中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多,所以不應該用來對URI做encoding, 只應該對URI中的某一個參數值做編碼。它會將處字母和數字,以及*字符外的都編碼成%xx形式. JS的unescape和decodeURI都不能用來解碼JAVA中URLEncoder.encode編碼的字符串。 在JAVA代碼中的URLEncoder.encode的字符串可以在JS中用decodeURIComponent還原成字符串。 在JAVA代碼中可以用URLDecoder.decode(request.getParameter("param"),"UTF-8")來將在JS中 用encodeURIComponent的參數還原成字符串。

總結

以上是生活随笔為你收集整理的java 转码%2f%_JS和JAVA中常用的编码转码函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。