用Javascript(js)进行HTML转义工具(处理特殊字符显示)
众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,Textarea提交的内容,更是要进行转义以防止javascript注入攻击。
- this.encodeHtml = function(s){
- return (typeof s != "string") ? s :
- s.replace(this.REGX_HTML_ENCODE,
- function($0){
- var c = $0.charCodeAt(0), r = ["&#"];
- c = (c == 0x20) ? 0xA0 : c;
- r.push(c); r.push(";");
- return r.join("");
- });
- };
- this.decodeHtml = function(s){
- return (typeof s != "string") ? s :
- s.replace(this.REGX_HTML_DECODE,
- function($0,$1){
- var c = this.HTML_ENCODE[$0]; // 尝试查表
- if(c === undefined){
- // Maybe is Entity Number
- if(!isNaN($1)){
- c = String.fromCharCode(($1 == 160) ? 32 : $1);
- }else{
- // Not Entity Number
- c = $0;
- }
- }
- return c;
- });
- };
- $package("js.lang"); // 没有包管理时,也可简单写成 js = {lang:{}};
- js.lang.String = function(){
- this.REGX_HTML_ENCODE = /"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g;
- this.REGX_HTML_DECODE = /&\w+;|&#(\d+);/g;
- this.REGX_TRIM = /(^\s*)|(\s*$)/g;
- this.HTML_DECODE = {
- "<" : "<",
- ">" : ">",
- "&" : "&",
- " ": " ",
- """: "\"",
- "©": ""
- // Add more
- };
- this.encodeHtml = function(s){
- s = (s != undefined) ? s : this.toString();
- return (typeof s != "string") ? s :
- s.replace(this.REGX_HTML_ENCODE,
- function($0){
- var c = $0.charCodeAt(0), r = ["&#"];
- c = (c == 0x20) ? 0xA0 : c;
- r.push(c); r.push(";");
- return r.join("");
- });
- };
- this.decodeHtml = function(s){
- var HTML_DECODE = this.HTML_DECODE;
- s = (s != undefined) ? s : this.toString();
- return (typeof s != "string") ? s :
- s.replace(this.REGX_HTML_DECODE,
- function($0, $1){
- var c = HTML_DECODE[$0];
- if(c == undefined){
- // Maybe is Entity Number
- if(!isNaN($1)){
- c = String.fromCharCode(($1 == 160) ? 32:$1);
- }else{
- c = $0;
- }
- }
- return c;
- });
- };
- this.trim = function(s){
- s = (s != undefined) ? s : this.toString();
- return (typeof s != "string") ? s :
- s.replace(this.REGX_TRIM, "");
- };
- this.hashCode = function(){
- var hash = this.__hash__, _char;
- if(hash == undefined || hash == 0){
- hash = 0;
- for (var i = 0, len=this.length; i < len; i++) {
- _char = this.charCodeAt(i);
- hash = 31*hash + _char;
- hash = hash & hash; // Convert to 32bit integer
- }
- hash = hash & 0x7fffffff;
- }
- this.__hash__ = hash;
- return this.__hash__;
- };
- };
- js.lang.String.call(js.lang.String);
- js.lang.String.call(String.prototype);
- // 那么
- var str = "&'\"中国abc def";
- var ec_str = str.encodeHtml();
- document.write(ec_str);
- document.write(""); // CU的博客在线编辑有bug,
- 放不上来!!!
- var dc_str = ec_str.decodeHtml();
- document.write(dc_str);
用Javascript(js)进行HTML转义工具(处理特殊字符显示)的更多相关文章
- Bootstrap入门(二十八)JS插件5:工具提醒
Bootstrap入门(二十八)JS插件5:工具提醒 工具提示在使用过程中比较常见,但是实现起来有些麻烦,而bootstrap则很好地解决了这个问题. 我们来写一个简单的实例 先引入CSS文件和JS文 ...
- JS转换HTML转义符,编码及解码
JS转换HTML转义符 //去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'') ...
- 几种常见的JavaScript混淆和反混淆工具分析实战
几种常见的JavaScript混淆和反混淆工具分析实战 xiaix2016-03-05+8共1195751人围观 ,发现 5 个不明物体WEB安全 信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试 ...
- 2017最好的JavaScript框架、库和工具 — SitePoint
与开发者数量相比,可能有更多的JavaScript框架.库和工具.截止到2017年5月,在GitHub上快速搜索能搜到超过110万的JavaScript项目. 在npmjs上有50万的可用包,并且这些 ...
- 前端Js框架汇总(工具多看)
前端Js框架汇总(工具多看) 一.总结 一句话总结: 二.前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领 ...
- 【JS】JS实现Html转义和反转义(html编码和解码)的方法总结
1.JS实现html转义和反转义主要有两种方式: 1).利用用浏览器内部转换器实现html转义: 2).用正则表达式实现html转义: 2.封装的JS工具类: var HtmlUtil = { /*1 ...
- js正则表达式图形化工具-rline
github地址:https://github.com/finance-sh/rline 在线demo: http://lihuazhai.com/demo/test.html 这是一个js正则表达式 ...
- JS转换HTML转义符
JS转换HTML转义符 //去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'') ...
- javascript(js)小数精度丢失的解决方案
原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3* ...
- 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数
来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...
随机推荐
- HTML5入门(---------------HTML——基本骨架--------------)
HTML基础 一.HTML 超文本标记语言.英文全拼:HyperText Markup Language.负责网页的语义描述. 二.HTML基本骨架 <!DOCTYPE html> < ...
- 关于vs2012、tfs2012、windows server 2008r2一些记录
windows server 2008r2安装在虚拟机中,装有tfs2012.sql server 2012. 物理机装有vs2012 1.用vs2012连接tfs时候,会让输入一个有效用户.输入的是 ...
- [网络安全] [视频分享]KaLi Linux基础培训2016 最新的哦【福吧资源网】
最新的教程同时针对kali linux2016最新版本的多个问题解决办法还有一些实例利用. 下载地址:http://www.fu83.cn/thread-310-1-1.html
- 如何动态在文档中加入<script></script>写入大段js?
<script language="javascript">var script = document.createElement("script" ...
- hdu3415 单调队列
Max Sum of Max-K-sub-sequence Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- linux下centos的网络连接
- fping tcping hping nmap nc
[root@test ~]# fping -a -g 192.168.40.1 192.168.40.240 |nl #-a 扫描alive主机,-g扫描一个段的ip地址 [root@test ...
- 在github上搭建hexo博客
准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...
- JVM大端判断
JVM采用大端方式存多字节的数据,判断方法如下: public static void bytesToInt() throws IOException { /** * 将字节数组(byte[])转为整 ...
- thinkphp 模型、控制器、视图
控制器里面调用模型 echo D('Goods')->index(); 调用GoodsModel下index 控制器里面调用其他控制器 echo A('Goods')->index(); ...
