Я пытаюсь просканировать содержимое и заменить исходные теги изображения чем-то другим (в частности, dataURI при его поддержке) - на основе нескольких вопросов, которые я прочитал здесь, я пытаюсь использовать preg_replace()
:preg_replace image src
// Base64 Encodes an image
function wpdu_base64_encode_image($imagefile) {
$imgtype = array('jpg', 'gif', 'png');
$filename = file_exists($imagefile) ? htmlentities($imagefile) : die($imagefile.'Image file name does not exist');
$filetype = pathinfo($filename, PATHINFO_EXTENSION);
if (in_array($filetype, $imgtype)){
$imgbinary = fread(fopen($filename, "r"), filesize($filename));
} else {
die ('Invalid image type, jpg, gif, and png is only allowed');
}
return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
}
// Do the do
add_filter('the_content','wpdu_image_replace');
function wpdu_image_replace($content) {
$upload_dir = wp_upload_dir();
return preg_replace('/<img.*src="(.*?)".*?>/', wpdu_base64_encode_image($upload_dir['path'].'/'.\1), $content);
}
проблема Я бег в wpdu_base64_encode_image($upload_dir['path'].'/'.\1)
, который в основном выводит preg_replace
результата - в настоящее время получает:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING
$upload_dir['path']
правильно выводит путь к папке изображений, которые я урожденная d, но есть также несколько проверок, которые я пробовал и которых пока не удалось достичь:
- Проверьте, является ли источник изображения относительным, и если это так, отделите домен (в настоящее время можно быть сделано с
site_url()
, который я бы предполагающей должны бытьpreg_replace()
) - Если изображение даже не локальный сервер (опять-таки - я предполагаю, что с помощью
site_url()
чек), пропустить его
Я не так хорошо знаком с preg_replace()
, если у кого есть предложения, я бы очень признателен. Благодаря!
Редактировать: Вместо этого следует использовать http://simplehtmldom.sourceforge.net/? Кажется, это довольно тяжелый молот, но если это более надежный способ, то я все для него - кто-нибудь использовал это раньше?