我想从字符串中删除所有base64图像

<img src="data:image/png;base64,iVBORw0..="><img src="data:image/png;base64,iVBORw1..=">...

并用image1、image2等替换它们.

<img src=" image1"><img src=" image2">...

因此,我删除了字符串的base64部分,并用"image"替换它,后跟出现计数器,但它不起作用,所以我一直得到image1.

我能做什么?

这是我目前的代码:

    $replacement = "image";
    $stringResult= deleteBase64_andReplace("data:", "=", $replacement, $string);
    echo $stringResult;



function deleteBase64_andReplace($start, $end, $replacement, $string) {
    $count = 0;

    $pattern = '|' . preg_quote($start) . '(.*)' . preg_quote($end) . '|U'; 
 
    while (strpos($string, $start) !== false) { 
    return preg_replace($pattern, $replacement.++$count, $string); 

    }
    
}

推荐答案

您需要将deleteBase64_andReplace函数替换为

function deleteBase64_andReplace($start, $end, $replacement, $string) {
    $count = 0;
    $pattern = '|' . preg_quote($start, '|') . '(.*?)' . preg_quote($end, '|') . '|s'; 
    while (strpos($string, $start) !== false) { 
        return preg_replace_callback($pattern, function($m) use ($replacement, &$count) {
            return $replacement . ++$count;}, $string); 
    }
}

PHP demo.yields 为<img src="image1"><img src="image2">.

笔记:

  • preg_replace替换为preg_replace_callback,以便在替换后续匹配项时能够对$count进行更改
  • preg_quote($start, '|') . '(.*?)' . preg_quote($end, '|')现在转义正则表达式分隔符字符,您 Select 了|,它也需要转义
  • 我建议省略U标志,将.*替换为.*?,以使正则表达式更加透明

Php相关问答推荐

在PHP中替换数组中的文本并同时使用其他函数

管理员订单列表中的自定义列与WooCommerce 8.6.1一起消失

从含有特殊字符的ANSI文本文件中读取数据是在移值,为什么?

创建一个新的可变产品及其属性以用于WooCommerce中的变体

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

用于计算付款费用的WooCommerce管理编辑产品中的自定义复选框

如何在PHP中组合日期范围

即使在WooCommerce购物车中添加了两次产品,也要将所有项目设置为空白行

Laravel自定义验证规则更正

在具有Angular 的 Laravel 应用程序中,不显示图像

WooCommerce:如果购物车中已存在产品,则增加购物车商品数量

laravel Eloquent 模型的问题

将一个表中的行连接为不同表MYSQL中的一列

Laravel Eloquent(where 子句)

循环中未序列化数组显示的问题

我的功能以舒适的方式显示数组 struct

在 groupBy laravel 5.7 中 Select 多列

WooCommerce – 在新订单邮箱通知中显示产品分类计数

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

使用 GROUP_CONCAT 规范化/转置来自查询的数据