【发布时间】:2016-07-02 20:28:06
【问题描述】:
我正在尝试使用 Summer Note js 编辑器获取插入图像字符串的 base64 代码。
我设法得到了这个
preg_replace('#<img\ssrc="data:image/([\w]+);base64,([a-zA-Z0-9+/-_=]+)"\sstyle="width:\s[0-9]+px;">#',"IMAGE REMOVED FROM CHROME\r\n", $content,-1, $counter);
以及一些变化,具体取决于
样式和数据文件名和 src 的位置总是根据不同的浏览器而变化,所以我有一些变化。
1) 有更简单的方法吗?
如果我拥有 img src、样式和数据文件名的所有组件,我将只匹配字符串?我可以创建所有变体,但如果我要为 10 种不同的变体执行 10 次 $content = preg_replace,那么仅仅找到一个匹配项不是非常慢吗?如果我的 $string 非常长,它会变得越来越慢。
2)我需要提取base64字符串保存为图片,如何使用上面的正则表达式来帮助我fopen、fwrite、fclose?
提前致谢。
【问题讨论】:
-
乱序可以用正则表达式完成。真正的问题是你到底想提取什么?要具体。
-
我想用文本字符串中的
替换 Img 字符串,然后提供要在其他地方下载的图像。我需要图像文件的 base 64 字符串、数据文件名、扩展名(如果可用)来创建文件,否则我使用 No File Name.imgextension。我相信一旦创建了文件,我就可以找到高度和宽度。 -
我想我得到了替换工作,只是效率不高,因为我的正则表达式字符串取决于订单。所以我有大约 9 个正则表达式,一些有/没有数据文件名,因为如果使用粘贴到文本字段中,一些浏览器不提供文件名
-
问题是当我使用 9 个不同的正则表达式时,我尝试使用 preg_match_all 我似乎没有以正确的顺序获得数组,所以我有 10 个不同的 if else 循环
-
一个快速的解决方案是
<img\s+([^>]+)>,然后在回调中,使用另一个替换修改$1,然后返回"<img " + modified + ">"