博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js转义html,反转义
阅读量:5115 次
发布时间:2019-06-13

本文共 3176 字,大约阅读时间需要 10 分钟。

今天同学问echats 的问题,说有乱码,结果我看到调试器里,js已经编译成html实体了,估计是服务器策略把jsp把输入的变量都变成html实体,导致数据在echats里面显示的不是正常汉字,而是一堆&#XXXXX;费劲千辛万苦找到一篇博客解决了这个问题。

连接:http://blog.chinaunix.net/uid-20511797-id-3118652.html

如果单纯解决这个问题可以提取出部分代码:

1 var Tools=:{}}; 2 Tools=function(){ 3 this.HTML_DECODE = { 4         "<" : "<",  5         ">" : ">",  6         "&" : "&",  7         " ": " ",  8         """: "\"",  9         "?": ""10 11         // Add more12     };13 this.REGX_HTML_DECODE = /&\w+;|&#(\d+);/g;14 this.decodeHtml=function(s){15  var HTML_DECODE = this.HTML_DECODE;16 17         s = (s != undefined) ? s : this.toString();18         return (typeof s != "string") ? s :19             s.replace(this.REGX_HTML_DECODE,20                       function($0, $1){21                           var c = HTML_DECODE[$0];22                           if(c == undefined){23                               // Maybe is Entity Number24                               if(!isNaN($1)){25                                   c = String.fromCharCode(($1 == 160) ? 32:$1);26                               }else{27                                   c = $0;28                               }29                           }30                           return c;31                       });32 }}33 Tools.call(Tools)

 

稍作分析一下。首先HTML_DECODE是常规的几个html实体,对应的几个字符串和实体。

REGX_HTML_DECODE是使用正则匹配以  &开头接下来至少一个字母数字下划线然后接一个分号(/&\w+;/)或者  &#开头接下来至少一个数字然后接一个分号(/&#(\d+);/)这个可以涵盖所有html实体了

decodeHtml方法中,首先判断传入 s是否合法,如果合法调用replace方法,将正则匹配的两种结果做处理。首先$0匹配到s中的能被匹配到的字符串,然后查看HTML_DECODE中是否有对应的实体字符串,如果有直接返回对应的字符串(30行),如果没有(22行)则判断组匹配(\d+)是不是数字,如果是数字(25行),使用String.fromCharCode方法转成字符,否则返回匹配到的数字(27行)。

 ###########################################################################################

再给同学使用的时候发现lenend显示不出来了,一调试发现lengend是数组,转义是有问题的,所以修改了一下方法。

1 var Tools={}; 2 Tools=function(){ 3 this.HTML_DECODE = { 4         "<" : "<",  5         ">" : ">",  6         "&" : "&",  7         " ": " ",  8         """: "\"",  9         "?": ""10 11         // Add more12     };13 this.REGX_HTML_DECODE = /&\w+;|&#(\d+);/g;14 this.decodeHtml=function(s){15  var HTML_DECODE = this.HTML_DECODE;16 17         s = (s != undefined) ? s : this.toString();18         return (typeof s == "string") ? 19             replacecode(s,HTML_DECODE,this.REGX_HTML_DECODE):(Array.isArray(s))?decodeArray(s,HTML_DECODE,this.REGX_HTML_DECODE):s;20 }21 22 function replacecode(s,decode,regxde){23     return s.replace(regxde,function($0, $1){24                           var c = decode[$0];25                           if(c == undefined){26                               // Maybe is Entity Number27                               if(!isNaN($1)){28                                   c = String.fromCharCode(($1 == 160) ? 32:$1);29                               }else{30                                   c = $0;31                               }32                           }33                           return c;34                       })35 };36 37 function decodeArray(arr,decode,regxde){38     return arr.map(function(item){39         return replacecode(item,decode,regxde)40     })41 }42 43 }44 Tools.call(Tools)

测试之后可以了。

转载于:https://www.cnblogs.com/web-Timer/p/5706960.html

你可能感兴趣的文章
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>