Доброго вечера. Помогите пожалуйста советом (желательно с примером). Только не камнями, не спец в php (Спасибо). На примере Joomla. В этом движке есть такое понятие как материал, материал создается подобным js визуальным редактором, в котором я и пишу этот вопрос на сайте php.ru. Все что мы сделали в редакторе, записывается в одну переменную(ячейку) в БД. Все-все-все - это не просто текст, а html разметка с контейнерами, свойствами и.т.д. Что нужно - выдрать все теги img и записать на их место другие (Seo тема - высота, ширина, альт, титл). Парсим: $art_html = $this->item->text; // это собственно наш кусок html - материала из база preg_match_all('/<img[^>]+>/i',$art_html, $result_img, PREG_OFFSET_CAPTURE); // парсим img теги Спарсили все ок. Да тут ми имеем еще и вхождение. Пробуем подставить ширину и глубину, хотя бы в шаблон замены. preg_match_all('/src=("[^"]*")/i',$result_img[0][0][0], $img); $size = getimagesize (str_replace('"','', $img[1][0])); $new_img = "<img src={$img[1][0]} {$size[3]} >" // готовая картинка с размерами Все отлично, получили img тег с реальными размерами картинки. теперь нужно старый img заменить на новый. Для замены мы имеем или полностью старый img тег или вхождение + можно посчитать длину старого тега. Ну ни как не получается! Ни так, ни сяк - видимо, что-то в экранировании служебных символоа типа - < > = " : / апостоф. Подскажите что-то. Спасибо! Плачу!
Не надо DOM регулярными выражениями. Всё гораздо проще: DOMDocument или (мне больше нравится) http://simplehtmldom.sourceforge.net/manual.htm - находите ваши изображения запросами типа jQuery и меняете что надо.
Мне нужно именно средствами php, с помощью js это уже не SEO тема будет. В редакторе, я ковырялась он весь на js - не потяну, то же думала на моменте записи в БД это сделать, я помру - 100 мильенов раз! --- Добавлено --- Вот тогда еще такой вопрос, а есть ли в php ограничения на работу с строками? Как я понимаю, все функции обработки строк в php - строки. Просто столкнулась в lua там четко написаны ограничения - длинны, символов, кодировки. --- Добавлено --- все функции обработки строк в php - строки Щя будут ржать и тролиь
Я же не сказал на jQuery, я сказал, что библиотека позваляет разботать с DOM как на jQuery, но из php.
Извините ссылку не посмотрела! По быстрому глянула, вопрос не как найти, а как заменить известное данные средствами php, в данных состоящих их 0 до 255. Я, не гуру!
Стоит почитать про preg_match_all, но в данном случае если совпадения не будет обработаны в цикле лучше использовать preg_match. Продолжу логическую цепочку: Код (PHP): // Делаем замену $art_html = str_replace($result_img[0], $new_img); Для экранирования символов регулярок функция preg_quote Код (PHP): $art_html = preg_replace('/' . preg_quote($result_img[0]) . '/', $new_img); Не плачь, почитай про функции для работы с регулярками А я бы делал замену сразу: Код (PHP): $art_html = preg_replace_callback('/<img[^>]+>/i', function($matches) { preg_match('/src=("[^"]*")/i', $matches[0][0], $img); $size = getimagesize(str_replace('"','', $img[1])); return "<img src={$img[1][0]} {$size[3]} >"; }, $art_html);
Ну я обычно делаю так - через ту либу заменяю в сгенерированной dom-структуре, потом собираю обратно в html - одним вызовом. Там можно с найденными элементами DOM работать напрямую - заменять атрибуты, менять текст и т.п.
Сделала, спасибо. Спешила $new_img = "<img src={$img[1][0]} {$size[3]} >" // готовая картинка с размерами В конце не поставила точку с запятушкой, Что было ниже не срабатывало. Цельный день в корзину
@oxana77 оформление кода https://php.ru/forum/threads/tipichnyj-dialog-s-novichkom.59596/#post-527225