php html

    xiaoxiao2025-04-23  10

    在处理网页字符串的时候,尤其是做爬虫类的应用时,经常会涉及到要处理的字符串中包含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标签

    转载请注明原文地址: https://ju.6miu.com/read-1298360.html
    最新回复(0)