• home > php > base >

    延迟加载文章里面的图片—php正则替换图片地址—phpcms适用

    Author:zhoulujun Date:

    display:none并不能解决图片延迟加载的问题,html解析时图片就被浏览器加载。只有从源头入手。1、pre或code包裹内容然后js处理。2、php输出时候,直接替换文章图片地址(数据库存整篇),谷歌对图片延迟加载友好,国内不知情况

    首先我们来回顾下字符串处理

    php字符串位置判断与统计

    strstr -- 搜索一个字符串在另一个字符串中的第一次出现位置。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。, bool 类型判断时采用 === 全等判断,

    注: 1、这个函数是大小写敏感的。2、strstr('12345','2') !== false,是 !==false,而不是!=false


    $email = 'user@example.com';
    $domain = strstr($email, '@');
    echo $domain;
    // prints @example.com


    stristr与strstr 的区别就是stristr不分区大小写。

    相对于前两者查找成功后返回的是字符,strpos查找成功后则是返回的是位置。因为位置有可能是0,所以判断查找失败使用===false更合适。

    strpost()  -- 查找字符串首次出现的位置,返回boolean值.

    strpos的性能比较好,strpos在执行速度上都比以上两个函数快,如果只是判断needle是否在字符串haystack中,则使用strpos较好,它将占用更少的内存和获得更快的执行速度。但是strpos对特殊字符支持不好,比如对中文就不能很好支持。

    if(strpos('www.jb51.net','jb51') !== false){ 
     echo '包含jb51'; 
    }else{
     echo '不包含jb51'; 
    }
    • strstr 区别大小写,从字符开始找如果有返回true否则就返回false 

    • stristr 字符不区别大小写,从字符开始找如果有返回true否则就返回false

    • strpos 区别大小写strpos查找成功后则是返回的是位置。因为位置有可能是0,所以判断查找失败使用===false更合适。

    if(strstr($HTTP_SERVER_VARS[HTTP_USER_AGENT], "Mozilla/5.0"))   //支持特殊字符"/"和中文字符

    if(strpos($HTTP_SERVER_VARS[HTTP_USER_AGENT], "Mozilla/5.0"))  //对"/"和中文字符不支持

    substr_count 统计“子字符串”在“原始字符串中出现的次数”

    $number = substr_count(big_string, small_string);

    strstr、stristr、strpos这三个函数的区别 https://blog.csdn.net/wustzbq0713/article/details/45586813

    php正则替换preg_replace

    官方语法:preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

    参数说明:

    • $pattern: 要搜索的模式,可以是字符串或一个字符串数组。

    • $replacement: 用于替换的字符串或字符串数组。

    • $subject: 要搜索替换的目标字符串或字符串数组。

    • $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

    • $count: 可选,为替换执行的次数。

    有点懵,不过看下案列还好

    $str = 'runo o   b';
    $str = preg_replace('/\s+/', '', $str);
    // 将会改变为'runoob'
    echo $str;

    查找下手册,应该会明白

    php处理文章中图片,替换图片地址,延迟加载

    结合上面的方法,代码处理如下

    $content='
    <p><img ><img ><img ><img ><img ><img src="https://www.zhoulujun.cn/uploadfile/2017/0724/20170724070528526.jpeg" title="1500894048836671.jpeg" width="240" height="164" alt="1500894048836671.jpeg" style="display: inline;"></p>
    ';
    echo substr_count($content,'<img ');
    if(substr_count($content,'<img ')>5&&strpos($content,'data-original')===false){
        $pregRule = "/(<[img|IMG].*?src=)[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"](.*?[\/]?>)/";
        $content = preg_replace($pregRule, '$1"https://www.zhoulujun.cn/statics/images/andy/loading.gif" data-original="${2}"$3', $content);
        echo $content;
    }else{
        echo $content;
    }

    这个应该好理解

    phpcms文章图片延迟加载

    找到phpcms/templates/default/content/show.html 文件,修改content,代码如下

    {if $allow_visitor==1}
    <?php
    if(substr_count($content,'<img ')>5&&strpos($content,'data-original')===false){
        $pregRule = "/(<[img|IMG].*?src=)[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"](.*?[\/]?>)/";
        $content = preg_replace($pregRule, '$1"https://www.zhoulujun.cn/statics/images/andy/loading.gif" data-original="${2}"$3', $content);
        echo $content;
    }else{
        echo $content;
    }
    ?>

    在末尾,增加延迟加载js

    <script src="//cdn.zhoulujun.cn/statics/js/andy/jquery.lazyload.min.js"></script>
    <script defer="defer" type="text/javascript">
        $("#Article").find("img").lazyload({
            placeholder: 'https://www.zhoulujun.cn/statics/images/andy/loading.gif',
            effect: "fadeIn",
            threshold: 200
        });
    </script>

    这样phpcms文章就延迟加载了


    转载本站文章《延迟加载文章里面的图片—php正则替换图片地址—phpcms适用》,
    请注明出处:https://www.zhoulujun.cn/html/php/phpBase/2020_0201_8280.html