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'をsrc="data:image/png;base64,/9j/4WvuRXhpZgAASUkqAAgAAAAIAA8BAgASAAAAbgAABAgAK"のような同等の base64 に置き換える必要があります---(これは実際の 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 Manipulator を見てください。これにより、厄介な正規表現ではなく、よりオブジェクト指向の方法で 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 に答える