<img src="image.png" alt="An image">
yourをに置き換え、<img src="<?php echo data_uri('image.png'); ?>" alt="An image">
必要に応じて次の関数を定義します。
function data_uri($filename) {
$mime = mime_content_type($filename);
$data = base64_encode(file_get_contents($filename));
return "data:$mime;base64,$data";
}
おそらく巨大なhtmlファイルになってしまうので、データベースの外にファイルを保存する方が良いでしょうか? Android には詳しくありませんが、iOS では、html ファイルを表示する webview のベース パスを次のように設定できます。
更新:
いくつかの img 要素を含む (content.php) を作成し、その上で以下を実行しました。
$content = file_get_contents('content.php');
$search = '/(<img\s+src=["\'])([^"\']+)(["\']\s+[^>]+>)/';
$content = preg_replace_callback($search, create_function(
'$matches',
'return $matches[1] . data_uri($matches[2]) . $matches[3];'
), $content);
質問に投稿したコードでは、パターンにスラッシュがありませんでした。また、文字通り実行するだけになってしまいますdata_uri('$2')
(つまり、$2 はパラメーターとして使用される実際の文字列です)。preg_replace_callback
preg_replace によって検出された実際の値にアクセスできます。
とにかく、上記のコードはすべての画像を によって返された値に置き換えdata_uri
、したがって img 要素をデータ URI で構築します。現在、属性は二重引用符で囲まれており、それ以外は何もないと想定しているため、パターンを少し改善したい場合があります。また、src 属性は要素の最初の属性であると想定しているため、XML 解析が一般的に推奨される理由です。これの重大度は、コース外のデータを入力するかどうかによって異なります。
更新 2 :
より一般的な解決策は、私の最新のコメントに従って、2 つの正規表現に分割することです。まず、検索パターンを $search = '(]+>)'; に変更します。次に、関数を次のようpreg_replace_callback($search, 'img_handler', $content);
に定義します。img_handler
function img_handler($matches) {
$image_element = $matches[1];
$pattern = '/(src=["\'])([^"\']+)(["\'])/';
$image_element; = preg_replace_callback($pattern, create_function(
$matches,
$matches[1] . data_uri($matches[2]) . $matches[3]),
$image_element);
return $image_element;
}
これが機能する方法は、最初の正規表現がすべての ing 要素 () を識別し、それらをコールバック関数 img_handler に送信することです。これにより、src 属性のみが置き換えられます。XML はもう少し複雑です (ただし、より一般的です)。例をまとめる時間はありませんが、十分に文書化されています。基本的に同じことを行うDOMDocumentまたはSimpleXMLをチェックしてください。
最後に:
あなたは今あなたの質問を2回修正しました.これは時々明確にするために確かに必要ですか.私たちは最初の質問からどんどん離れていると感じています. 質問を簡潔にし、1 つの主題に焦点を当てることをお勧めします。回答またはコメントが、それ自体では回答されていないさらなる質問を提起する場合は、おそらくその件に関する新しいスレッドを開始する (たとえば、 img 要素の src 属性を置き換える) か、同様の既に尋ねられた質問を探すことをお勧めします。