0

我正在尝试处理一些 html 并将所有 img 标签 src 替换为 base64。我编写了下面的函数来转换图像并以base64返回。我需要帮助的是以下内容:

我需要使用 str_replace、preg_replace 或某种正则表达式来扫描一些 html 并将所有“src”替换为图像的 base64 表示。html 存储为变量,而不是实际的 html 文档。例如,如果我有一些 html,例如:

$htmlSample =  "<div>Some text, yada yada and now and image <img src='image1.png' /></div>"

我需要扫描它并将src='image.png'替换为 base64 等效项,例如src="data:image/png;base64,/9j/4WvuRXhpZgAASUkqAAgAAAAIAA8BAgASAAAAbgAABAgAK" ---(这不是实际的 base64 只是一些填充文本)。该函数需要能够对 html 中的多个图像执行此操作。如果你能指出我正确的方向,我会非常感激。多谢你们!

function convertImage($file)
{


    if($fp = fopen($file,"rb", 0))
    {
       $picture = fread($fp,filesize($file));
       fclose($fp);
       $base64 = base64_encode($picture);
       $tag = '<img ' . "" .
          'src="data:image/png;base64,' . $base64 .
          '"  />';
       return $tag;
    }

}
4

2 回答 2

1

查看诸如 SimpleDOM 之类的 DOM 操纵器。这将让您以更加面向对象的方式解析 html 文档,而不是凌乱的正则表达式,因为库很可能会处理您可能没有想到的情况。

于 2013-03-14T00:25:54.570 回答
0

正如 Adam 建议的那样,我能够使用 SimpleDOM(链接:simplehtmldom.sourceforge.net)完成这项工作。

require_once('simple_html_dom.php');
$html = "This is some test code <img width='50' src='img/paddock1.jpg' /> And this is some additional text and an image: <img src='img/paddock2.jpg' />";

//uses function from simple_html_dom.php to make html parsable
$doc = str_get_html($html);

//finds each image in html and converts
foreach ($doc->find('img[src]') as $img) 
{

    //get src of image and assign to $src
    $src = $img->src;

    $imageBase = convertImage($src);

    $img->src = $imageBase;


}

$html = (string) $doc;

echo $html;

function convertImage($file)
{

    //finds file based on $src name from above and runs code if file exists
    if($fp = fopen($file,"rb", 0))
    {
       $picture = fread($fp,filesize($file));
       fclose($fp);
       //converts image file to base64
        $base64 = base64_encode($picture);

       //returns nessary data: + base64 code to $imageBase above to be inserted into html>img>src
       return 'data:image/png;base64,' . $base64;
    }
}
于 2013-03-18T18:57:46.233 回答