Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти в HTML-тексте <img ... src="*"> и осуществить замену
 
 автор: zzDimazz   (25.11.2007 в 15:39)   письмо автору
 
 

Написать такое правило для ereg_replace, которое будет находить в произвольном html подстроку вида:
<img ... src="*"> и заменить ее на <img ... src="NewUrl/*">
При этом корректно должны быть обработаны строки вида:
<img border=0 alt="erfrfrf" src="*" style="....">
<img src=*>
<img src='*'>
<img src="*" />

Усложнение:
Не должны заменяться строки, где путь к картинке абсолютный, т.е. вида:
<img src="http://ya.ru/images/1.jpg" />

помогите плизз очень надо!!!

   
 
 автор: Faraon   (25.11.2007 в 19:09)   письмо автору
 
   для: zzDimazz   (25.11.2007 в 15:39)
 

Не особо понятно, поточнее можно?

   
 
 автор: zzDimazz   (25.11.2007 в 20:15)   письмо автору
 
   для: Faraon   (25.11.2007 в 19:09)
 

Написать такой скрипт который бы в HTML файле находил строки вида
<img src="http://img.yandex.net/i/www/logo-ua.png" width=178 height=120 title="Yandex"alt="Яndex" border=5>
и менял их на такие
<img src="NEW_URL/http://img.yandex.net/i/www/logo-ua.png" width=178 height=120 title="Yandex"alt="Яndex" border=5>
Приэтом все параметры рисунка border width height и тд не должны меняться
У честь что в поле src = могут быть такие кавычки " и ' а могут не быть вообще!
Не должны заменяться строки, где путь к картинке абсолютный, т.е. вида:
<img src="http://ya.ru/images/1.jpg" />

   
 
 автор: Anna_php   (26.11.2007 в 16:10)   письмо автору
 
   для: zzDimazz   (25.11.2007 в 20:15)
 


// входные параметры - 2 урла (от корня!) - старый и новый

$pattern = array("/([href|HREF]\s*=\s*)(\"|'|&#39;)\s*({\w*:\w*})?(\/?)("."$link".")([^\w^\.^_^-])/",
                    "/(window\.open\s*\(\s*)(\"|'|&#39;)\s*({\w*:\w*})?(\/?)("."$link".")([^\w^\.^_^-])/",
                    "/(window\.location\s*\(\s*)(\"|'|&#39;)\s*({\w*:\w*})?(\/?)("."$link".")([^\w^\.^_^-])/",
                    "/(document\.location\s*\(\s*)(\"|'|&#39;)\s*({\w*:\w*})?(\/?)("."$link".")([^\w^\.^_^-])/");
$replace = array("\\1\\2\\3\\4".$new_url."\\6",
                    "\\1\\2\\3\\4".$new_url."\\6",
                    "\\1\\2\\3\\4".$new_url."\\6",
                    "\\1\\2\\3\\4".$new_url."\\6");
$link = preg_quote($link,"/");

// кроме того нужно убрать начальный и конечный слэш, если такие есть

// а потом просто замена

$content_new = preg_replace($pattern,$replace,$content);

   
 
 автор: zzDimazz   (26.11.2007 в 19:58)   письмо автору
 
   для: Anna_php   (26.11.2007 в 16:10)
 

Cпасибо большушее!!!!!!!!!!

   
 
 автор: exp   (26.11.2007 в 21:16)   письмо автору
 
   для: Anna_php   (26.11.2007 в 16:10)
 

код необычно написан , наверное лучше сделать
$replace = "\\1\\2\\3\\4".$new_url."\\6";
потомучто все значения массива одинаковые.

идея насчёт массивов наверное правильная
, если все эти пути не нужны только как GET-параметры для отдачи одной и той-же -картинки,
и если я только правильно понял что и для чего делается,
например
<?
$str 
'<html><img src="http://test.ru/img.gif"/><br />
<img src="test.gpg"/>text1<br />
<img src="gd/test.php" border="5px" width="90%" height="20px"/>text2<br />
<img border="5px" width="90%" height="20px" src="/test.gif"/>text3<br />
<img src="http.gif"/>text4<br />
<img src="http://test.ru/img/?var=test"/>text5<br />
'
;


$str preg_replace'#(<img [^>]*?src="?\'?)((?!http://)[^ >"\']+)(\"?\'?[^>]*>)#esi',
    
"'\\1' .'/scripts/?img=' . rawurlencode('\\2') . '\\3'",
    
$str );
    
echo 
htmlspecialchars($str3) ;

непойму почему у меня в том что проходит через preg_replace экранированы ковычки
поэтому код неработает :)
может настройки какие

   
 
 автор: kasmanaft   (27.11.2007 в 07:00)   письмо автору
 
   для: exp   (26.11.2007 в 21:16)
 

>> непойму почему у меня в том что проходит через preg_replace экранированы ковычки
поэтому код неработает :)

Хз почему так получается, но если поменять местами кавычки и апострофы, всё нормально:
'"\\1" ."/scripts/?img=" . rawurlencode("\\2") . "\\3"',

   
 
 автор: Faraon   (26.11.2007 в 16:25)   письмо автору
 
   для: zzDimazz   (25.11.2007 в 20:15)
 

Интересно а чем отличается абсолютность этого пути

http://img.yandex.net/i/www/logo-ua.png

и этого

http://ya.ru/images/1.jpg

;)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования