中文字符处理encodeURI编码与decodeURI解码
最近做了一个功能,将产生的JfreeChart报表及附加的Summary导出到文章,也就是将这些内容加入到文章所在的表中,然后在页面显示。
问题在于,summary的内容是动态的,并且是样式比较复杂table,一大堆标签,如果在手动后台处理,需要转义N多诸如“”特殊字符,并且,summary的内容已经生成好,并不需要重新拿一遍数据,所以比较好的做法就是,用Ajax以post方式将innerHTML的内容提交到后台,那么,这里出现一个问题,由于innerHTML有标签,中文等,需要编码一下才可以,否则会报编码错误的。
JS部分代码:
- <span style="font-size: small;">function exportArticle(){
- var blogId=document.getElementById("blogId").value;
- var css=document.getElementById("css").value;
- var filename=document.getElementById("filename").value;
- // var filename1=document.getElementById("filename1").value;
- var start=document.getElementById("start").value;
- var end=document.getElementById("end").value;
- var strs=document.getElementById("weisummary").innerHTML;
- strs=encodeURIComponent(strs);
- var reporturl='<%=request.getContextPath()%>/SingularController?service=exportReportToarticle';
- var params='blogId='+blogId+'&css='+css+'&filename='+filename+'&types=1&start='+start+'&end='+end+'&constr='+strs;
- new Ajax.Request(
- reporturl,
- {
- method: 'post',
- parameters: params,
- encoding: 'UTF-8',
- requestHeaders: {Accept:'application/json'},
- onComplete: toreport
- });
- }
- function toreport(originalRequest){
- var jsonObj = originalRequest.responseText.evalJSON(false);
- if(jsonObj== true){
- alert("<s:text key='blog.health.exportArticleSucc'/>");
- }
- }</span>
<span style="font-size:12px;">function exportArticle(){ var blogId=document.getElementById("blogId").value; var css=document.getElementById("css").value; var filename=document.getElementById("filename").value; // var filename1=document.getElementById("filename1").value; var start=document.getElementById("start").value; var end=document.getElementById("end").value; var strs=document.getElementById("weisummary").innerHTML; strs=encodeURIComponent(strs);var reporturl='<%=request.getContextPath()%>/SingularController?service=exportReportToarticle'; var params='blogId='+blogId+'&css='+css+'&filename='+filename+'&types=1&start='+start+'&end='+end+'&constr='+strs;new Ajax.Request( reporturl,{method: 'post',parameters: params,encoding: 'UTF-8',requestHeaders: {Accept:'application/json'}, onComplete: toreport });}function toreport(originalRequest){var jsonObj = originalRequest.responseText.evalJSON(false);if(jsonObj== true){alert("<s:text key='blog.health.exportArticleSucc'/>");}}</span>
之前,我用的是encodeURI编码innerHTML的内容,但是出现一个很奇怪的问题,我传的内容比较简单时可以传到service端,如果内容比较复杂就到不了service,后来调试时,发现以encodeURI编码后的内容,&,=等都没有编码,后来到网上查了一下,发现JS编码的方法有三种:
(以下是摘抄过来的,呵,因为已经写的很详细了,这里贴一下,原地址是:DIY部落(http://www.diybl.com/course/1_web/javascript/jsjs/200855/113679.html))
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent
1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
2、 进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
3、 js使用数据时可以使用escape
例如:搜藏中history纪录。
4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支
持(form中的编码方式和当前页面编码方式相同)
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,'',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, '',(,),*,-,.,_,~,0-9,a-z,A-Z
escape 方法
对 String 对象编码以便它们能在所有计算机上可读,
escape(charString)
必选项 charstring 参数是要编码的任意 String 对象或文字。
说明
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符
的十六进制数。例如,空格返回的是 "%20" 。
字符值大于 255 的以 %uxxxx 格式存储。
注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。
encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。
encodeURI(URIString)
必选的 URIString 参数代表一个已编码的 URI。
说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使
用 encodeURIComponent 方法对这些字符进行编码。
encodeURIComponent 方法
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。
encodeURIComponent(encodedURIString)
必选的 encodedURIString 参数代表一个已编码的 URI 组件。
说明
encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码
,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。
如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行。
中文字符处理encodeURI编码与decodeURI解码相关推荐
- 查阅中文字符的Unicode编码
jshell> Integer.toHexString('中')//返回一个中文字符的Unicode编码 $28 ==> "4e2d" jshell> '\u4e ...
- Android 中文字符转UTF-8编码
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; ...
- [oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选
中文编码GB2312 回忆上次内容 上次回顾了 日韩各有 编码格式 日本 有假名 五十音 一字节 可以勉强放下 有日本汉字 字符数量超过20000+ 韩国 有谚文 数量超过500 一个字节 放不下 有 ...
- 网页编码与数据传递中的中文字符编码
最近工作中遇到中文编码,中文参数传递,AJAX返回值包含中文乱码的问题,为此奋斗了一宿,有点心得,有点体会,总结如下,希望对迷惑于此中者有解惑之功效! 在网上一阵狠搜,编码函数的确是有,包括Javas ...
- Java的编码方式、单个char类型存储大部分中文字符、getBytes()、new String()的转换流程
目录 一 编码种类 1.1 ASCII码 1.2 ISO8859-1编码 1.3 GBK编码 1.4 Unicode字符集 1.4.1 UTF-8编码 1.4.2 UTF-16编码 1.4.3 UTF ...
- tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...
TinyXML-2 是一个用 C++ 开发的小巧.高效的 XML 解析工具,它在 GitHub 网站上的链接为: https://github.com/leethomason/tinyxml2 .它的 ...
- Python之中文字符问题
1. 在Python中使用中文 在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分"Unicode字符串"和"uni ...
- python中unicode函数_中文字符 unicode转utf-8函数 python实现
unicode编码范围 00000000-0000007F的字符,用单个字节来表示: 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字 ...
- java 中文解码_java使用URLDecoder和URLEncoder对中文字符进行编码和解码
摘要: URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换.在本文中,我们以使用 ...
最新文章
- Android 实现闹钟功能
- [MySQL 5.1 体验]MySQL 事件调度器(Event Scheduler)
- Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
- springboot 接收小程序图片以及参数_常见的SpringBoot面试题一
- php点菜系统开题报告,点餐管理系统的设计与实现-开题报告
- 推荐几个机器学习算法及应用领域相关的中国大牛:
- mysql重命名数据表称方式_在MySQL中,使用()重命名数据表。_学小易找答案
- 前端学习(2887):如何短时间内实现v-for createApp解决方案
- 让Netty“榨干”你的CPU
- Pytorch可视化工具 —— TensorBoard
- 消除ie上的:为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件...
- 决不允许AI杀人武器研发!马斯克领衔2400名科学家签署联名宣言
- 软件再快不如自带:找不到电脑文件?教你这 3 个Mac搜索技巧
- iic标准c语言,I2C总线之(三)---以C语言理解IIC
- 生信-记一次NCBI-R语言-淋巴癌突变与未突变基因的差异分析
- 无线wifi服务器,无线串口服务器,wifi转串口,网口转wifi,无线串口通讯模块-上海卓岚...
- Ubuntu安装lightdm重启后黑屏
- PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume
- 《牛客刷verilog》Part III Verilog企业真题
- Makefile学习之 all
热门文章
- 金博康拓优蓝铁虎安居宝安通旺龙晶创晶控大华门禁CPU梯控复制
- 2018年计算机应用基础离线作业,东北师范大学2018年春《计算机应用基础》离线作业答案.doc...
- python+tkinter一步步展示漂亮的棒棒糖和云朵
- PS加深减淡工具里的高光。阴影 中间调有什么区别?
- Typora Beta历史版本 (非收费版本)
- L1-039 古风排版 python实现
- 【苹果imessage虚拟机安装】除了警报,徽章,声音,JSON包仍然可用。
- 100亿!中国联通发起设立5G产业基金
- 什么样的电销话术可以让客户不反感,不挂断,不投诉,还可以成交
- vue-router的cdn使用,一篇解决百度少有的cdn引用方法