[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как добавить атрибуты к тегу img?
OrlenkoKN
Здравствуйте, Уважаемые!
В общем у меня ситуация такая:
у меня есть форма добавления статьи, в этой статье есть картинки, в коде каритнки прописаны как <img src='/путь'>, мне нужно с помощью регулярных выражений добавить к тегу img атрибуты alt и title.
Подскажите пожалуйста как это можно реализовать..

Полностью поставленная задача выглядит следующим образом:

1. сделать запрос в базу на определение урлов всех имеющихся там картинок
PHP
$query mysql_query ("select * from album");
    while(
$author mysql_fetch_array($ath))
          {
        
$alt $author['descr'];
          }


2. перед записью в базу текста нужно текст распарсить на предмет тегов img
как-то так:
HTML
$pattern = "#<img\s[^>]*src=([\"'])?([^\s]+)\\1[^>]*\/?>#is";


3. определить урл имеющихся в тексте картинок и сравнить его с урлами вытащенными из базы на предмет совпадения

4. добавить атрибуты alt и title и прописать в них значение переменной $alt
5. записать текст в базу

Я не прошу писать скрипт за меня, просто прошу подсказки путей решения..
Спасибо!



Спустя 19 минут, 37 секунд (11.09.2009 - 10:24) FatCat написал(а):
Делал нечто подобное.

Передаем картинки функции-обработчику:
PHP
$txt preg_replace"#<img (.+?)>#ie" "\$this->regex_check_image('\\1')"$txt );


В самой функции:
1. Убиваем переводы строк и двойные пробелы:
PHP
$txt str_replace(PHP_EOL," ",$txt);
while(
stristr($txt,"  ",))$txt str_replace("  "," ",$txt);
Наверное и табулятор нужно прибить.

2. Сплитуем по пробелу на массив атрибутов.

3. Из массива атрибутов забираем те, которые содержат символ "="; их сплитуем в массив, где ключ элемента содержит имя атрибута, а значение элемента - значение атрибута.
Собственно, все готово к работе; можно не только альты и тайтлы заполнять, можно и чекать, вцыставлены ли размеры картинок, и для невыставленных ставить заданные значения.

Спустя 3 дня, 3 часа, 33 минуты, 24 секунды (14.09.2009 - 13:57) OrlenkoKN написал(а):
Спасибо за подсказку!

Но пока я пробую немного другим методом и в нём мне тоже нужна помощь большезнающих людей!)

В общем, на входе в обработчике я имею переменную $newbody, которая содержит в себе текст поста с картинками. Далее я выполняю следующие преобразования:
PHP
$text = $newbody; 
$res 
= mysql_query('SELECT pict, descr FROM album WHERE 1'); 
while 
($row = mysql_fetch_array($res))  
{ 
    $words 
= '<IMG src="http://somesite.su/'.$row['pict'].'">'; 
    $replace 
= '<img src="'.$row['pict'].'" title="'.$row['descr'].'" alt="'.$row['descr'].'">'; 
    $text 
= str_replace($words, $replace, $text) 
}


.. и в итоге запись в базу:
PHP
$sql = "Insert into Blogg (userid,name,message) values ($iduser, '$newheader','$text')";


..любой из элементов поля $row['pict'] имеет вид: album/some.jpg
поле descr - текстовое описание..

В общем изменений при "обработке" сообщения никаких не происходит..

Я подозреваю, что у меня неверно прописаны значения переменных $words и $replace. Если не ошибаюсь здесь регулярные выражения нужно использовать? Помогите, пожалуйста, составить правильное выражение.. Проблема наверняка в записи этих переменных остаётся, потому как если я упрощаю выражение, например, для замены одного слова другим в тексте, то скрипт срабатывает...

Спустя 4 часа, 29 минут, 49 секунд (14.09.2009 - 18:27) hara_ написал(а):
Ну как бы пример регулярки вам уже подсказали

А по вашему способу, - вот сюда зайдите:
http://www.php.net/manual/en/function.str-replace.php

и прочитайте там Notes
сразу после Examples
а потом посмотрите на свой код.

PS а вообще всего то нужно напечатать $words и $text и найти отличия, что бы себя проверить. (т.к. кто знает что там, те notes могут и не помочь)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.