zoukankan      html  css  js  c++  java
  • PHP过滤html注释

    过滤html注释:

    所谓过滤,不过是字符串的匹配与替换,这里我们用到的正则匹配替换函数preg_replace(reg,replace,string);,PHPer都清楚,这个函数的关键在于reg的精确度,那么我们就来试试看吧:

    首先要知道html注释的格式,是这样的:<!--注释内容-->。

    开始正则的书写

    $html = "<!--something-->something";
    $html = preg_replace("/<!--.*-->/","",$html);
    echo $html;

    上面的代码将输出 something,似乎成功了呢,不急,多测试几个例子

    $html = "<!--something-->something<!--something-->";
    $html = preg_replace("/<!--.*-->/","",$html);
    echo $html;

    这个例子告诉我们,这样写并不能达到我们期望的效果,于是正则优化成了这样

    preg_replace("/<!--.*?-->/","",$html);

    嗯,这下满意了,但是html中会存在这样的代码<!--[if lt IE 9]>something<![endif]-->,这是浏览器兼容代码,显然是不能被过滤的,所以我们的正则继续优化,变成这样

    preg_replace("/<!--[^![]*?-->/","",$html);

    又接着如果html中有<script><!--something//--></script>的代码,我们又需要改一下我们的匹配规则了,改成了这样

    preg_replace("/<!--[^![]*?(?<!//)-->/","",$html);

    这样的话我基本上就去掉了我需要去掉的html的注释了!

    意外收获:在优化过程中,没有多多行注释进行考虑,但规则意外的正常匹配了多行注释,不知道是否因为是从文件读取的html!

    经测试尚未发现有将正文过滤掉的情况,如有疑问,欢迎留言指正。

  • 相关阅读:
    iOS开发-文件管理(一)
    浅析栈区和堆区内存分配的区别
    浅谈Block传值-匿名函数(代码块)
    cell的各种使用和赋值 总结
    类方法和对象方法的区别
    属性传值 ,代理传值,单例
    类目,延展,协议
    任意点 并查集
    Codeforces 145E. Lucky Queries 线段树
    Codeforces 103B. Cthulhu 并查集运用
  • 原文地址:https://www.cnblogs.com/yiven/p/8213524.html
Copyright © 2011-2022 走看看