私はこのコードを持っています:
function toDataUri( $html )
{
# convert css URLs to data URIs
$html = preg_replace_callback( "#(url\([\'\"]?)([^\"\'\)]+)([\"\']?\))#", 'create_data_uri', $html );
return $html;
}
// callback function
private function create_data_uri( $matches )
{
$filetype = explode( '.', $matches[ 2 ] );
$filetype = trim(strtolower( $filetype[ count( $filetype ) - 1 ] ));
// replace ?whatever=value from extensions
$filetype = preg_replace('#\?.*#', '', $filetype);
$datauri = $matches[ 2 ];
$data = get_file_contents( $datauri );
if (! $data) return $matches[ 0 ];
$data = base64_encode( $data );
//compile and return a data: URI with the encoded image data
return $matches[ 1 ] . "data:image/$filetype;base64,$data" . $matches[ 3 ];
}
基本的に、HTMLファイル内の形式でURLを検索し、url(path)
それらをbase64データURIに置き換えます。
問題は、入力HTMLが10kbなどの数キロの場合、最終的な応答を返すのに何年もかかることです。そのような場合に実行できる最適化や、htmlが与えられるとurl(path)
一致するものを検索し、それらをデータURIに変換する他の解決策はありますか?