查找以“X”开头并以“Y”结尾的字符串,并替换其间的内容

时间:2013-03-14 00:00:35

标签: php regex

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

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

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

我需要扫描它并用base64等效替换 src ='image.png',例如 src =“data:image / png; base64,/ 9j / 4WvuRXhpZgAASUkqAAgAAAAAAAABAAAAAAAAAAAAAAAAAAA ---(这不是实际的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;
    }

}

2 个答案:

答案 0 :(得分:1)

查看DOM Manipulator,例如SimpleDOM。这将让你以更加面向对象的方式解析html文档而不是凌乱的正则表达式,因为库更有可能处理你可能没想到的情况。

答案 1 :(得分:0)

正如亚当建议的那样,我能够使用SimpleDOM(link: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;
    }
}