Intereting Posts

Regex: изменить теги img src

Я пытаюсь заменить все изображения в html-документе встроенным изображением (data: image). У меня есть пример кода, который не работает:

function data_uri($filename) { $mime = mime_content_type($filename); $data = base64_encode(file_get_contents($filename)); return "data:$mime;base64,$data"; } function img_handler($matches) { $image_element = $matches[1]; $pattern = '/(src=["\'])([^"\']+)(["\'])/'; $image_element = preg_replace($pattern, create_function( $matches, $matches[1] . data_uri($matches[2]) . $matches[3]), $image_element); return $image_element; } $content = (many) different img tags $search = '(<img\s+[^>]+>)'; $content = preg_replace_callback($search, 'img_handler', $content); 

Может ли кто-нибудь проверить этот код? Благодаря!

UPDATE: (…) Предупреждение file_get_contents () [function.file-get-contents]: Имя файла не может быть пустым (…)

Это означает, что src url не находится в обработчике 🙁

ОБНОВЛЕНИЕ 2

 <?php function data_uri($filename) { $mime = mime_content_type($filename); $data = base64_encode(file_get_contents($filename)); return "data:$mime;base64,$data"; } function img_handler($matches) { $image_element = $matches[0]; $pattern = '/(src=["\'])([^"\']+)(["\'])/'; $image_element = preg_replace_callback($pattern, create_function( $matchess, $matchess[1] . data_uri($matchess[2]) . $matchess[3]), $image_element); return $image_element; } $content = '<a href="http://img.ruphp.com/image/Googlelogoi.png/180px-Googlelogoi.png"><img class="alignnone" src="http://img.ruphp.com/image/Googlelogoi.png/180px-Googlelogoi.png" alt="google" width="580" height="326" title="google" /></a>'; $search = '(<img\s+[^>]+>)'; $content = preg_replace_callback($search, 'img_handler', $content); echo $content; ?> 

Я загрузил этот тестовый файл -> http://goo.gl/vWl9B

Ваше регулярное выражение в порядке. Вы используете create_function() неправильно. И впоследствии внутренний preg_replace_callback() не работает. Вызов функции data_uri() происходит до того, как выполняется замена регулярного выражения, следовательно, неопределенная ошибка имени файла.

Используйте правильную функцию обратного вызова:

 $image_element = preg_replace_callback($pattern, "data_uri_callback", $image_element); 

Затем переместите свой код туда:

 function data_uri_callback($matchess) { return $matchess[1] . data_uri($matchess[2]) . $matchess[3]; }