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的参数还原成字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis 下划线转驼峰配置

一直以来&#xff0c;在sqlmap文件中&#xff0c;对于数据库中的下划线字段转驼峰&#xff0c;我们都是通过resultmap来做的&#xff0c;如下&#xff1a; <resultMap id"ISTableStatistics" type"com.medsoft.perfstat.pojo.ISTableStatistics" > &…

Python练习-迭代器-模拟cat|grep文件

代码如下: 1 # 编辑者&#xff1a;闫龙2 def grep(FindWhat):3 fopen("a.txt","r",encoding"utf8")#以只读的方式打开a.txt文件4 while True:5 try:6 fline next(f).strip()#由于File类型本身就是一个迭代器,所以直…

Spring和JSF集成:转换器

使用任何Web框架时&#xff0c;都不可避免地需要将用户输入的数据从String为其他类型。 尽管Spring和JSF在设计和功能上确实有很大的不同&#xff0c;但它们都具有转换器策略来处理此问题。 让我们从春天开始。 Spring 3引入了一个全新的转换框架&#xff0c;该框架允许将任何类…

nacos配置ap_Nacos 1.0.0 功能预览

本文来自于我的个人主页&#xff1a;Nacos 1.0.0 功能预览&#xff0c;转载请保留链接 ;)Nacos 1.0.0 是正式 GA 的版本&#xff0c;在架构、功能和API设计上进行了全方位的重构和升级&#xff0c;1.0.0版本标志着Nacos的架构已经稳定&#xff0c;API列表最终确定。升级到1.0.0…

poj 2229 Sumsets

题目大意&#xff1a; 一个数由2的幂次数的和构成&#xff0c;问有几种构成方式&#xff1f; 主要是找规律 代码如下 1 #include <cstdio>2 #include <cstring>3 int n;4 #define M 10000000005 int dp[1000002];6 7 int main(int argc, char const *argv[])8 {9 …

html 甘特图_Rplotly|交互式甘特图(Gantt chart)项目管理/学习计划

甘特图(Gantt chart)&#xff0c;又常被称为横道图或者条状图&#xff0c;是现代企业项目管理领域运用最为广泛的一种图示。就是通过条形来显示项目的进度、时间安排等相关情况的。项目管理外&#xff0c;也可以用来管理学习计划。绘制甘特图的工具有很多&#xff0c;本文介绍使…

使您的Spring Security @Secured注释更干燥

最近&#xff0c;Grails用户邮件列表中的一个用户想知道在定义Secured批注时如何减少重复 。 在Java批注中指定属性的规则非常严格&#xff0c;因此我看不到直接执行他所要求的方法的方法。 使用Groovy并没有真正的帮助&#xff0c;因为Groovy类中的注释大部分与Java中的注释几…

阅读《大型网站技术架构》 第三章心得

今天阅读了《大型网站技术架构》 的第三章&#xff0c;这一章主要讲解了大型网站核心架构要素&#xff0c;并且概括的讲解了相应的实现方法。 软件架构除了系统功能需求外&#xff0c;还需要关注性能、可用性、伸缩性、扩展性、安全性。 其中性能是网站的重要指标。优化网站性能…

easyui数据表格重置_数据库三种删除方式

第一种 使用delete 语句特点&#xff1a;delete 属于数据库操纵语言DML&#xff0c;表示删除表中的数据&#xff0c;删除过程是每次从表中删除一行&#xff0c;并把该行删除操作作为事务记录在日志中保存可以配合事件&#xff08;transaction&#xff09;和 回滚&#xff08;ro…

main函数之间的代码操作

全局对象的构造函数会在main函数之前执行。转载于:https://www.cnblogs.com/yingl/p/5817123.html

Windows 自启动总结《转》

开机启动项  【启动项目就是开机的时候系统会在前台或者后台运行的程序】  当Windows&#xff08;操作系统&#xff09;完成登录过程&#xff0c;进程表中出现了很多的进程&#xff01;Windows在启动的时候&#xff0c;自动加载了很多程序。  许多程序的自启动&#xff0…

win10多合一原版系统_微软Win10专业版制作多合一系统安装盘教程

微软Win10怎么制作多合一系统安装盘?和Win10家庭版、win10企业版&#xff0c;win10教育版相比&#xff0c;微软Win10专业版是最受大家喜欢的操作系统&#xff0c;那么在安装Win10操作系统的时候&#xff0c;我们就不得不准备多个不同版本的系统安装盘。可是你知道微软Win10专业…

Oracle Coherence:分布式数据管理

本文介绍如何使用Oracle Coherence提供分布式&#xff08;分区&#xff09;数据管理。 在下面的示例应用程序中&#xff0c;创建了一个名为OTV的新集群&#xff0c;并且在该集群的两个成员之间分配了一个名为user-map的缓存对象。 二手技术&#xff1a; JDK 1.6.0_21 Maven的…

Ajax学习笔记

Ajax 什么是ajax AJAX即“Asynchronous JavaScript and XML”&#xff08;异步的JavaScript与XML技术&#xff09;&#xff0c;指的是一套综合了多项技术的浏览器端网页开发技术。以前&#xff0c;几乎所有的网站都由HTML页面实现&#xff0c;服务器处理每一个用户请求都需要重…

美团点评DBProxy读写分离使用说明

目的 因为业务架构上需要实现读写分离&#xff0c;刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy&#xff0c;关于其介绍在官方文档已经有很详细的说明了&#xff0c;其特性主要有&#xff1a;读写分离、负载均衡、支持分表、IP过滤、sql语句黑名单、…

apriori算法c++_关联分析——基于Apriori算法实现

电子商务推荐系统主要是通过统计和挖掘技术&#xff0c;根据用户在网站上的行为,主动为用户提供推荐服务&#xff0c;从而提高网站体验。而根据不同的业务场景&#xff0c;推荐系统需要满足不同的推荐粒度&#xff0c;包括搜索推荐,商品类目推荐,商品标签推荐&#xff0c;店铺推…

在Oracle Coherence中分发Spring Bean

本文展示了如何通过使用Oracle Coherence中的EntryProcessor和可移植对象格式&#xff08;POF&#xff09;功能来分发Spring Bean。 Coherence通过EntryProcessor API支持无锁编程模型。 此功能通过减少网络访问并在条目上执行隐式的低级锁定来提高系统性能。 此隐式低级锁定功…

postman测试实例--断言

让我们来看看postman测试的一些例子。 其中大部分是作为内部postman片段。 大多数测试是为单行的JavaScript语句一样简单。 只要你想一个请求&#xff0c;你可以有很多的测试。注意&#xff1a;一个响应已从服务器接收后测试脚本运行。测试实例1.设置环境变量 postman.setEnvir…

python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式&#xff0c;该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中&#xff0c;某个类只能出现一个实例时&#xff0c;单例对象就能派上用场。比如&#xff0c;某个服务器程序的配置信息存放在一…

android-铃声的设置与播放

在android系统中&#xff0c;不同铃声存放的铃声路径&#xff1a;/system/media/audio/ringtones 来电铃声/system/media/audio/notifications 短信通知铃声/system/media/audio/alarms 闹钟铃声铃声的设置&#xff1a;import java.io.File; import andr…