php - 从发布的屏幕截图数据 php 中删除 img src

标签 php regex base64 screenshot

正在寻找一些基于正则表达式的帮助!已经搜索了网站,但没有找到任何适用于我的案例的解决方案。

我有一个向用户显示的表单,其中一个文本区域是屏幕截图的粘贴区域。目前,此屏幕截图数据已输入到数据库中,但由于这开始使数据库变得相当大,我决定为每个粘贴的屏幕截图创建一个单独的图像,因为它们比数据库中占用的空间占用更少的空间。

我遇到的问题是从屏幕截图中剥离 img src 标签等并将数据成功保存到可以正确打开的图像文件中。

粘贴的截图数据插入数据库如下:

<img src="data:image/png;base64,_BASE_64_DATA_HERE"><br> 

在发布此数据时,关于如何去除不必要的项目并仅保留 base64 数据,创建保存的 PNG 图像,有什么想法吗?

目前我有这个,这对我来说不太管用,只是创建了一个无法打开的图像:

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($screenshot);
$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $screenshot));

file_put_contents('screenshots/screens.png', $data);

$screenshot 是粘贴的数据。

最佳答案

我可以建议删除 ^字符串 anchor 的开始并使用 preg_match使用\K截断将使用 [^"<]* 捕获的图像 Base64 数据之前的所有内容模式 - 除 " 之外的 0 个或多个字符和 < (可能,它甚至可以减少到 [^"]* ):

preg_match('#data:image/\w+;base64,\K[^"<]*#i', '<img src="data:image/png;base64,_BASE_64_DATA_HERE"><br>', $match);
echo $match[0]; // => _BASE_64_DATA_HERE

参见 IDEONE demo

关于php - 从发布的屏幕截图数据 php 中删除 img src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31195481/

相关文章:

javascript - 使用正则表达式的URL “starts with”?

javascript - 为什么我的字符串没有通过正则表达式?

Swift 和 golang 编码 base64 给出不同的结果

r - 如何提取R中的第一个字符串

php - 从 Base64 字符串中提取图像尺寸

javascript - Angular:在 IE 中将 base64 字符串转换为字节数组

php - 从 swf 文件问题生成图像

php - 从数据库获取更改/插入通知的标准方法

php - MySql 搜索脚本写入未知错误

php - 使用 MySQL 和 PHP 在 HTML 中创建动态表