zoukankan      html  css  js  c++  java
  • php html_entity_decode使用总结

    在处理网页字符串的时候,尤其是做爬虫类的应用时,经常会涉及到要处理的字符串中包含html标签,现在对这类字符串的处理做一个小的总结:

    有时候获取到的字符串中有html标签,在入库的时候出于安全的考虑通常会对这样的字符串做转义处理,例如:

    $a = '<div><p>11111</p></div>';
    $b = htmlentities($a);
    file_put_contents('./a.txt',$b);
    echo $b;

    在网页上显示是这样的:<div><p>11111</p></div>

    但是如果echo $a;那么网页上只会显示:11111

    由此可见,如果不转义,那么字符串里面的html标签就会被解析(如果是恶意代码,就会被执行),转义后会被当做字符串输出。

    在来看看被转义后的$b,

    &lt;div&gt;&lt;p&gt;11111&lt;/p&gt;&lt;/div&gt;

    如果要反转义$b,那么使用php函数html_entity_decode,例如:

    $a = '<div><p>11111</p></div>';
    $b = htmlentities($a);
    $b = html_entity_decode($b);
    file_put_contents('./a.txt',$b);
    echo $b;

    这时网页上显示11111,$b的值此时就是$a,

    最近做了一个需求,像这种带html标签的字符串入库的时候需要转义保留,在页面上显示的时候在反转义。然而客户端需要这些数据的时候需要过滤掉这些html标签,所以给客户端的字符串需要过滤掉html标签,

    $b = '&lt;div&gt;&lt;p&gt;11111&lt;/p&gt;&lt;/div&gt;'

    返还给客户端的字符串,

    $b = html_entity_decode($b);

    过滤所有的html标签:

    $pattern = array(

    "@<script(.*?)</script>@is", //过滤掉js代码

    "@<iframe(.*?)</iframe>@is",//过滤掉iframe

    "@<style(.*?)</style>@is",//过滤掉css

    "@<(.*?)>@is" //过滤html标签

    );   

    foreach($pattern as $k => $v){

    $b = preg_replace($v,"",$b);

    }

    echo $b; //输出11111,html标签都被过滤掉了

    有时候需要过滤掉某一个标签之外的其他html标签,那改怎么办呢?

    "@<[^img](.*?)>@is" //过滤除了img标签之外的其他html标签

  • 相关阅读:
    Perforce笔记
    Lumia 800 无法正常开机
    Windows service 中出现Set ServiceLogin 对话框
    华为要求七千员工先辞职再竞岗 补偿费超10亿
    BLOG新址:http://longware.spaces.live.com
    家装(2)
    解脱
    论持久战
    有感于软件项目测试
    THE POEM AS A GIFT FOR MY GF'S BIRTHDAY
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8324318.html
Copyright © 2011-2022 走看看