在HTML电子邮件中嵌入图像 - 替换<img/>的“src”属性

时间:2012-03-16 07:54:19

标签: php preg-replace swiftmailer

  

可能重复:
  Grabbing the href attribute of an A element

我有一个客户可以制作自己的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);

1 个答案:

答案 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;
            }
    }