记开发过程中偶遇的一个bug
2012-07-10 14:53
274 查看
几天前做评论显示,偶遇一个小bug,感觉颇有趣味故记录于此!
大家知道一般评论内容分两段:前面是评论的话题,后面是评论的内容。而话题一般是以链接的形式出现,所以,对评论内容要做如下处理:
而全部评论内容要当做html文本被浏览器解析,我们又不确定使用者会输入什么,所以,我们需要下面这个方法来对全部评论内容进行一次转码:
这时候,问题就来了,我们是在a标签替换之前对评论内容做encodeHTML,还是在之后做呢!?如果在之后做,那a标签也会被干掉,很明显不行!如果放在之前做,那replaceLink方法里面的正则reg就不满足需求了,因为单引号和双引号的转码值含有#号,匹配会出错!诚然,一个合理的正则可以解决这个问题,但在这里,我想给大家看的是另外一种方法(重写replaceLink):
看到这里估计有人会扔砖说这什么啊,明明改一行代码搞定的问题非要弄成这样。在此我想表达的是:任何问题都有很多种解决思路,精妙的算法可以使代码看起来小巧、美观,但有时复杂的代码,往往更能把解决问题的思路表现出来!
改bug的过程真的是一个从焦头烂额到豁然开朗的过程,一个好的bug也真的可以让我们成长不少。问题最终得到了解决,有兴趣的朋友可以自己去试着用正则的思路解决这个问题,在此我就不多做赘述了!
大家知道一般评论内容分两段:前面是评论的话题,后面是评论的内容。而话题一般是以链接的形式出现,所以,对评论内容要做如下处理:
function replaceLink(str){ var reg = /#(.+)#/gi; return str.replace(reg,function(){ return '<a href="###">' + arguments[0] + '</a>'; }); }
而全部评论内容要当做html文本被浏览器解析,我们又不确定使用者会输入什么,所以,我们需要下面这个方法来对全部评论内容进行一次转码:
function encodeHTML(str){ if(typeof str == 'string'){ return str.replace(/\&/g,'&').replace(/"/g,'"').replace(/\</g,'<').replace(/\>/g,'>').replace(/\'/g,' '').replace(/\u00A0/g,' ').replace(/(\u0020|\u000B|\u2028|\u2029|\f)/g,' '); }else{ return false; } }
这时候,问题就来了,我们是在a标签替换之前对评论内容做encodeHTML,还是在之后做呢!?如果在之后做,那a标签也会被干掉,很明显不行!如果放在之前做,那replaceLink方法里面的正则reg就不满足需求了,因为单引号和双引号的转码值含有#号,匹配会出错!诚然,一个合理的正则可以解决这个问题,但在这里,我想给大家看的是另外一种方法(重写replaceLink):
function replaceLink(str){ var matchArr = str.match(/#([^#]*)#/ig); for(var i=0,len=matchArr.length;i<len;i++){ var reg = new RegExp(matchArr[i], 'gi'); str = str.replace(reg, '_'); } str = encodeHTML(str); for(var i=0,len=matchArr.length;i<len;i++){ var link = '<a href="###">' + encodeHTML(matchArr[i]) + '</a>'; str = str.replace(/_/, link); } return str; }
看到这里估计有人会扔砖说这什么啊,明明改一行代码搞定的问题非要弄成这样。在此我想表达的是:任何问题都有很多种解决思路,精妙的算法可以使代码看起来小巧、美观,但有时复杂的代码,往往更能把解决问题的思路表现出来!
改bug的过程真的是一个从焦头烂额到豁然开朗的过程,一个好的bug也真的可以让我们成长不少。问题最终得到了解决,有兴趣的朋友可以自己去试着用正则的思路解决这个问题,在此我就不多做赘述了!
相关文章推荐
- 开发过程碰到的一个bug
- 【原创】wingdb开发过程中遇到一个比较“头疼”的bug
- 一直以来我(每个从事linux开发的人)深受“bug”的困扰,好像“bug”不足以描述这种被问题困扰的无奈。因为当在驱动或BSP的开发过程中,所碰到的问题比解决一个bug难得多。 Li
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
- wingdb开发过程中遇到一个比较“头疼”的bug
- iOS开发笔记之三十一——日历NSCaledar使用过程中遇到的一个苹果系统bug
- wingdb开发过程中遇到一个比较“头疼”的bug
- wingdb开发过程中遇到一个比较“头疼”的bug
- [开发随笔]发现东芝日版X01T的一个BUG
- 每个程序员都应该亲自经历一个软件的开发全过程
- 记录一个人事管理信息系统的开发过程1
- 记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序
- 软件开发过程的一个实例
- [置顶] 搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!
- 最近在研究一个c#控件的开发,需求是要在SplitContainer控件中分割条部分作为容器放入各类控件。开发过程中收集的资料罗列如下
- 偶遇mysql(Percona Server)的一个新bug
- 一个Java应用程序的开发过程
- H5开发过程中修复的bug记录
- IOS开发笔记之十一——一个delegate没有更新引起的bug(bug总结三)
- iOS开发Xcode崩溃在main函数入口时如何定位Bug的一个小方法以及一个恶心的bug介绍