Prototype源码浅析 String部分(三)之HTML字符串处理


Posted in Javascript onJanuary 15, 2012
HTML处理 stripTags  | escapeHTML |  unescapeHTML
   
JSON处理 unfilterJSON |  isJSON |  evalJSON |  parseJSON
脚本处理 stripScripts |  extractScripts  | evalScripts
现在,String部分转入具体的关联应用,分别对应
HTML字符串,JSON字符串和HTML中的脚本字符串。
【乱入一句,有关JSON的一点东西,可以看看http://www.cnblogs.com/TomXu/archive/2012/01/11/2311956.html】
下面分别叙述:
一、HTML字符串
stripTags :移除字符串中所有的 HTML 标签。
escapeHTML : 将 HTML 特殊字符转换为它们的等价实体。(&对应& <对应< >对应> )
unescapeHTML :移除字符串中的标签,并将用实体表示的 HTML 特殊字符转换为它们的正常形式。(escapeHTML 的逆操作)
stripTags 中的一段正则/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi用来匹配标签中的内容,注意不能换行,不过换行的话就有语法错误了。
【这个方法唯一需要注意的位置是,stripTags会移除<script>标签,但是不会移除里面的内容,所以可能将<script>里面的内容暴露出来,影响页面结构】
二、脚本字符串
stripScripts : 移除字符串中所有的 HTML script 块。弥补stripTags方法对script标签的缺陷
extractScripts :提取出字符串中包含的所有 script 的内容,并将之返回作为一个字符串数组。
evalScripts :执行字符串中包含的所有 script 块的内容。返回一个数组,该数组包含每个 script 执行后返回的值。
stripScripts中的正则是对stripTags中一个正则的发展
function stripScripts() { 
var pattern = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'img');//i忽略大小写,m换行,g全局 
return this.replace(pattern , ''); 
}

function extractScripts() { 
var matchAll = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'img'), 
matchOne = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'im'); 
return (this.match(matchAll) || []).map(function(scriptTag) { 
return (scriptTag.match(matchOne) || ['', ''])[1]; 
}); 
}

map是对数组的一个扩展,某些浏览器有这个原生方法,参见《chrome原生方法之数组》
最后获得的是一个所有script标签内部内容的一个数组,因此evalScripts 的做法就很自然的可以想出来——循环遍历获得的数组,然后依次执行(eval),存储每一项执行的结果。
function evalScripts() { 
return this.extractScripts().map(function(script) { return eval(script) }); 
}

三、JSON处理
unfilterJSON:移除 Ajax JSON 或 JavaScript 响应内容周围的安全注释界定符。
isJSON:使用正则表达式检测字符串是否是合法的 JSON 格式
evalJSON:执行一个 JSON 格式的字符串,并返回结果对象
其中isJSON和evalJSON就是JSON.js中的parseJSON,而且代码也差不多,参见《从字符串中解析出JSON》
顺便说一点unfilterJSON中的安全注释界定符,这是一种安全机制,对于自家的数据,可以在返回值两端加上特殊的字符(界定符)来表明数据的来源,客户端解析的时候用unfilterJSON来处理掉添加的界定符,借此可以在一定程度上减少一些XSS的攻击。
Prototype中默认的形式是:
'/*-secure-\n{"name": "小西山子","age": 24}\n*/'
其中界定符号是 /*-secure-\n'和'\n*/'
Javascript 相关文章推荐
如果文字过长,则将过长的部分变成省略号显示
Jun 26 Javascript
JS DOM 操作实现代码
Aug 01 Javascript
浅析js中2个等号与3个等号的区别
Aug 06 Javascript
通过遮罩层实现浮层DIV登录的js代码
Feb 07 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
Feb 10 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
详解在Node.js中发起HTTP请求的5种方法
Jan 10 Javascript
Emberjs 通过 axios 下载文件的方法
Sep 03 Javascript
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 #Javascript
用js小类库获取浏览器的高度和宽度信息
Jan 15 #Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
Jan 15 #Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 #Javascript
20个最新的jQuery插件
Jan 13 #Javascript
JSON 数据格式介绍
Jan 13 #Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 #Javascript
You might like
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python while 循环使用的简单实例
2016/06/08 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python元字符的用法实例解析
2018/01/17 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
python实现数字炸弹游戏程序
2020/07/17 Python
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
英格兰足协官方商店:England Store
2019/07/12 全球购物
教师业务学习制度
2014/01/25 职场文书
进口业务员岗位职责
2014/04/06 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
自主招生教师推荐信
2014/05/10 职场文书
人事任命书范文
2014/06/04 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
师德培训心得体会2016
2016/01/09 职场文书
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS