【发布时间】:2011-11-29 10:09:56
【问题描述】:
我想知道是否可以这样做:
`readfile(base64_decode_only_img_src_tags("mypage.html"));
我一直在寻找解决方案,但没有结果。想法是将html文件的编码行更改为他的解码行,例如:
<img src="data:image/png;base64,**iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEW/v7////+Zw/90AAAAEUlEQVQI12P4z8CAFWEX/Q8Afr8P8erzE9cAAAAASUVORK5CYII=**">
收件人:
<img src="/path/to/images/image.gif">
我知道也许我应该解析代码以检测带有 img src 标记的行,然后解码这些行的 ** 标记部分 **,但我不知道在 readfile 期间该怎么做。
提前致谢。
正如@mario 所说,我正在测试他的代码:
$newhtml = file_get_contents('newhtml.html');
function data_to_img($match) {
list(, $img, $type, $base64, $end) = $match;
$bin = base64_decode($base64);
$md5 = md5($bin); // generate a new temporary filename
$fn = "$md5.$type";
file_exists($fn) or file_put_contents($fn, $bin);
return "$img$fn$end"; // new <img> tag
}
如果我尝试回显:
echo preg_replace_callbak('#(<img[^>]+src=")data:image/(gif|png|jpeg);base64,([\w=+/]+)("[^>]*>)#', "data_to_img", $content);
它适用于上面的 html 示例!现在我正在尝试使用我真正的 html 文件。我注意到 img src 比我提供的示例要长。我手上的img src的真实例子太长了这里就不贴了,所以请鼠标二键点击狗图片和图片信息查看base64代码。非常感谢!!
更新:希望这个人对 base64 大型编码和正则表达式有同样的问题
UPDATE2:马里奥解决了我的问题,非常感谢你。这是 preg_replace_callback 的代码和正则表达式:
echo preg_replace_callback('#(<img\s(?>(?!src=)[^>])*?src=")data:image/(gif|png|jpeg);base64,([\w=+/]++)("[^>]*>)#', "data_to_img", $content);
【问题讨论】:
-
为什么不直接使用实际图像?
-
你想做什么?您是否正在尝试使客户端可以从编码的 URI 中读取图像?您是否尝试打开图像服务器端?还是您只想要解码后的 URI 服务器端?
-
解码图像,保存在你的路径中,指向你的路径
-
我正在尝试在 textarea(html 编辑器 Web 应用程序)中打开一个 html 文件,但浏览器崩溃了。我认为问题来自以 base64 编码的打开图像(img src 太大),因为如果我添加存储在服务器上的其他图像,它工作得很好。我想解码 base64 行以减少链接的长度。谢谢。
标签: php javascript base64 image