处理字符串,尤其是复杂且很长的字符串,正则表达式当然是首选。。。
在博客、论坛中在HTML编辑器中写文章时,过滤一些危险代码是非常且有必要的。
Javascript过滤:
// 替换代码中的Script代码 function shield_script(str) { if(str == null || str == '') return ''; str = str.replace(/<script[^>]//*>/ig, '<!-- Script Code -->'); // 过滤包含多行的script代码 str = str.replace(/(<script[^>]*>[/w/W]*?<//script>)/igm, '<!-- Script Code -->'); return str; } // 替换代码中的Input和Button控件 function shield_input(str) { if(str == null || str == '') return ''; str = str.replace(/<button[^>]//*>/igm, '<!-- Button Code -->'); str = str.replace(/<input[^>]//*>/igm, '<!-- Input Code -->'); str = str.replace(/(<button[^>]*>[/w/W]*?<//button>)/igm, '<!-- Button Code -->'); return str; } // 替换代码中的onclick代码 function shield_click(str) { if(str == null || str == '') return ''; return str.replace(/(/s*onclick=[/"/'][/w/W]*?[/"/']/s*)/igm, ''); }
Ruby过滤:
# Example:Ruby Script def shield_script(str) if str =~ /(<script[^>]*>[/w/W]*?<//script>)/ return str.gsub(/(<script[^>]*>[/w/W]*?<//script>)/, '<!-- SCRIPT CODE -->') end end html = <<HTML_END <div><span>哈哈</span> <script type="text/javascript"> alert("跳转到网易"); location.href="http://www.163.com"; </script> <div id="list"> <script>document.write('<a href="http://163.com">网易</a>');</script> </div> </div> HTML_END puts shield_script(html) # 输出结果: # <div><span>哈哈</span> # <!-- SCRIPT CODE --> # <div id="list"> # <!-- SCRIPT CODE --> # </div> # </div>