我必须在sql数据库中保存html源代码(对于Android应用程序)。内容必须存储在本地。所以图像也必须保存。我认为继续以下是适当的:
但我怎么能意识到这一点?或者我应该用html5保存图像?我希望你能帮助我!
更新
$search = '(<img.*?src=")([^"]*?(\/[^/]*\.[^"]+))';
$replace = "<img src=\"".data_uri('$2')."\">";
$content = preg_replace($search, $replace, $content);
有人可以更正此代码吗?谢谢!
第二次更新:
示例:
<img class="alignnone" src="https://lh4.googleuserco (...)
<img src="https://lh4.googleuserco (...)
<img width="400" height="100" src='...' (...)
答案 0 :(得分:7)
将<img src="image.png" alt="An image">
替换为<img src="<?php echo data_uri('image.png'); ?>" alt="An image">
,并在适当的位置定义以下功能:
function data_uri($filename) {
$mime = mime_content_type($filename);
$data = base64_encode(file_get_contents($filename));
return "data:$mime;base64,$data";
}
你可能最终会得到大量的html文件,所以将文件存储在数据库之外可能会更好吗?我不熟悉Android,但在iOS上你可以设置显示html文件的webview的基本路径,例如this。
<强>更新强>:
我创建了一个包含几个img元素的(content.php),然后在其上运行了以下内容:
$content = file_get_contents('content.php');
$search = '/(<img\s+src=["\'])([^"\']+)(["\']\s+[^>]+>)/';
$content = preg_replace_callback($search, create_function(
'$matches',
'return $matches[1] . data_uri($matches[2]) . $matches[3];'
), $content);
在您在问题中发布的代码中,您的模式缺少斜杠,并且您最终只会运行data_uri('$2')
(即$ 2是用作参数的实际字符串)。 preg_replace_callback
允许您访问preg_replace找到的实际值。
无论如何,上面的代码将用data_uri
替换返回值的所有图像,从而构建带有数据URI的img元素。您可能希望稍微改进模式,因为它当前假定属性由双引号括起来,而且 src属性是元素的第一个属性,这就是为什么XML我认为通常建议解析。严重程度取决于您输入的数据。
更新2 :
更通用的解决方案是根据我的最新评论将其拆分为两个正则表达式。首先将您的搜索模式修改为$ search ='(] +&gt;)';然后preg_replace_callback($search, 'img_handler', $content);
将img_handler
函数定义为:
function img_handler($matches) {
$image_element = $matches[1];
$pattern = '/(src=["\'])([^"\']+)(["\'])/';
$image_element; = preg_replace_callback($pattern, create_function(
$matches,
$matches[1] . data_uri($matches[2]) . $matches[3]),
$image_element);
return $image_element;
}
这种方法的工作方式是第一个正则表达式识别所有ing元素()并将它们发送到回调函数img_handler,后者又只替换src属性。 XML有点复杂(但更通用)。我没有时间把一个例子放在一起,但它有很好的记录。查看基本上做同样事情的DOMDocument或SimpleXML。
IN CLOSING :
你现在已经两次修改了你的问题了,这肯定需要澄清,我觉得我们正在越来越远离最初的问题。我建议你把问题简明扼要地集中在一个主题上。如果答案或评论提出了其他问题,而这些问题本身没有得到解答,那么最好就此问题开始一个新的主题(例如replacing the src attribute of an img element)或寻找任何类似的已提问题。