我有一个客户可以制作自己的HTML简报的cms。这些是使用Swift邮件发送到选定的接收器。这些简报中包含链接到在线资源的图像。我想将这些图像嵌入到电子邮件本身中,这是Swift邮件程序支持的一项功能。
我想要完成的是客户可以创建自己的时事通讯,包括链接到图像。发送此链接图像时,必须将其嵌入电子邮件中所需的代码替换。因此我需要替换图像的来源:
<img src="http://source/to/file.gif" />
为:
<img src="{$message->embed(Swift_Image::fromPath('http://http://source/to/file.gif'))}" />
HTML内容(包括链接图像)存储在变量$ content中。我试图用:
替换src$content = preg_replace(
'/<img.*src="(.*?)".*?>/',
'<img src="' . $message->embed(Swift_Image::fromPath('\1"')) . '" />',
$content);
答案 0 :(得分:2)
我遵循DOM解析器建议并且它有效。我正在使用Simple DOM Parser
要替换所有img src:
require_once("../../simple_html_dom.php");
$content = str_get_html($content);
// Retrieve all img src tags and replace them
foreach($content->find('img') as $e)
{
if($e->src != "")
{
$value = $e->src;
echo $value;
$newValue = $message->embed(Swift_Image::fromPath($value));
$e->src = $newValue;
}
}
要替换背景标记的内容:
// Retrieve all background tags and replace them
foreach($content->find('td') as $e)
{
if($e->background != "")
{
$value = $e->background;
$newValue = $message->embed(Swift_Image::fromPath($value));
$e->background = $newValue;
}
}