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 = '[email protected]';
$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