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

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

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

 

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

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

тема: Ищем <img и добавляем кое-что
 
 автор: JIEXA   (06.09.2005 в 20:53)   письмо автору
 
 

Надо найти в тексте

<img src=""> # в src может быть любые символы, ещё могут присутствовать атрибуты alt, width height... Также src,alt, width,height... может написан с "" и без.

и заменит на
<a href="сюда нужно воставить, то что в src"><img src=""></a>


Вот привиду пример:

<?
$text 
"ля ля ля
тут много текста
<img src=http://images.ru/pic.jpg>
текс текст"
;
?>
после работы рег. выраж. должен быть такой вид:

<?
$text 
"<a href=http://images.ru/pic.jpg><img src=http://images.ru/pic.jpg></a>";
?>

   
 
 автор: Artem S.   (06.09.2005 в 22:55)   письмо автору
 
   для: JIEXA   (06.09.2005 в 20:53)
 


<?php
$text 
"ля ля ля
тут много текста
<img src=http://images.ru/pic.jpg>
текс текст"
;
$text preg_replace("#<img[^>]+?src=(['\">])?([-0-9a-z\.:/]+)(['\">])?.+#i",
        
"<a href=\"$2\"><img src=\"$2\"></a>"$text);
echo 
$text;
?>

   
 
 автор: JIEXA   (07.09.2005 в 00:48)   письмо автору
 
   для: Artem S.   (06.09.2005 в 22:55)
 

неработает, точнее глючит, он видимо конец src не находит

   
 
 автор: cheops   (07.09.2005 в 01:51)   письмо автору
 
   для: JIEXA   (07.09.2005 в 00:48)
 

А глючит на каких ссылках? Приведённый выше пример у меня нормально отрабатывает - приведите пожалуйста куски, где происходит сбой?

   
 
 автор: JIEXA   (07.09.2005 в 21:23)   письмо автору
 
   для: cheops   (07.09.2005 в 01:51)
 

1. Регулярное выражение я чуток изменил, добавил символ _
$text = preg_replace("#<img[^>]+?src=(['\">])?([-0-9a-z_\.:/]+)(['\">])?.+#i", 
        "<a href=\"$2\"><img src=\"$2\"></a>", $text); 


А глюк такой: К примеру такой текст:

<center><img alt='Download Master 4.3.3.905' src=/ibank/news/3281/download_master_4_3_3_905.jpg width=400 height=278></center>

после обработки выглядит так

<center><a href="/ibank/news/3281/download_master_4_3_3_905.jpg"><img src="/ibank/news/3281/download_master_4_3_3_905.jpg"></a>

тоесть куда то исчезает </center> да ещё и alt

   
 
 автор: JIEXA   (08.09.2005 в 23:53)   письмо автору
 
   для: JIEXA   (07.09.2005 в 21:23)
 

-

   
 
 автор: cheops   (09.09.2005 в 00:54)   письмо автору
 
   для: JIEXA   (07.09.2005 в 21:23)
 

Потестируйте данный скрипт, он подходит?
<?php 
$text 
"ля ля ля 
тут много текста 
<center><img alt='Download Master 4.3.3.905' src=/ibank/news/3281/download_master_4_3_3_905.jpg width=400 height=278></center>
текс текст"

$text preg_replace("#<img([^>]+?)src=(['\"])?([-0-9a-z_\.:/]+)(['\"])?([\s\w\d=^>]+)>#i"
        
"<a href=\"$3\"><img $1 src=\"$3\"$5></a>"$text); 
echo 
"<pre>";
echo 
$text
echo 
"</pre>";
?>

   
 
 автор: JIEXA   (09.09.2005 в 22:55)   письмо автору
 
   для: cheops   (09.09.2005 в 00:54)
 

Да он уже лучше работает, но тоже с ошибками!
Текст

<img src=/ibank/news/2158/kak_kachat_s_rapidshare_de_2.jpg>

после обработки выглядит так:

<a href="/ibank/news/2158/kak_kachat_s_rapidshare_de_2.jp"g"><img src="/ibank/news/2158/kak_kachat_s_rapidshare_de.jp"g></a>

и ещё бы хорошо добавить, что если урл начитнается на http то всё так и остаётся, а если он не на http значит добавляется http://otvali.ru/ibank/news/

   
 
 автор: cheops   (10.09.2005 в 00:26)   письмо автору
 
   для: JIEXA   (09.09.2005 в 22:55)
 

Давайте пока одну задачу решим (а с http потом) и проверим всё ли работает, чтобы знать, что даёт сбой
<?php 
$text 
"ля ля ля 
тут много текста 
<center><img alt='Download Master 4.3.3.905' src=/ibank/news/3281/download_master_4_3_3_905.jpg width=400 height=278></center> 
текс текст<img src=/ibank/news/2158/kak_kachat_s_rapidshare_de_2.jpg>"

$text preg_replace("#<img([^>]+?)src=(['\"])?([-0-9a-z_\.:/]+)(['\"])?([\s\w\d=^>]*)>#i"
        
"<a href=$2$3$4><img $1 src=$2$3$4$5></a>"$text); 
echo 
"<pre>"
echo 
$text
echo 
"</pre>"
?>

   
 
 автор: JIEXA   (10.09.2005 в 21:02)   письмо автору
 
   для: cheops   (10.09.2005 в 00:26)
 

теперь вроде всё отлично работает :-), вот только с http осталось сделать

   
 
 автор: cheops   (10.09.2005 в 21:34)   письмо автору
 
   для: JIEXA   (10.09.2005 в 21:02)
 

/*Раздумывая*/ За один заход уже вряд ли получится... нужно преобразовывать либо до скрипта, приведённого двумя постами выше, либо после...

   
 
 автор: JIEXA   (10.09.2005 в 22:37)   письмо автору
 
   для: cheops   (10.09.2005 в 21:34)
 

Жалко :-( давайте попробуем хоть как-нибудь.

Нашёл ещё одну ошибку, попробуйте обработать код:

<img src='http://mysite.ru/pic.jpg'>

увидете ошибку :-)

   
 
 автор: cheops   (11.09.2005 в 13:10)   письмо автору
 
   для: JIEXA   (10.09.2005 в 22:37)
 

А у меня нормально обрабатывается следующий текст
ля ля ля 
тут много текста 
<center><img alt='Download Master 4.3.3.905' src=/ibank/news/3281/download_master_4_3_3_905.jpg width=400 height=278></center> 
текс текст <img src=/ibank/news/2158/kak_kachat_s_rapidshare_de_2.jpg>
 ещё одна ссылка <img src='http://mysite.ru/pic.jpg'>

без сбоев.

   
 
 автор: elenaki   (03.01.2006 в 14:08)   письмо автору
 
   для: cheops   (11.09.2005 в 13:10)
 

мне нужно тоже самое, только вместо добавления ссылки изменить путь, сохранив при этом имя файла

   
 
 автор: cheops   (03.01.2006 в 14:15)   письмо автору
 
   для: elenaki   (03.01.2006 в 14:08)
 

Чтобы модифицировать заменяемый текст, нам волей не волей придётся прибегнуть к функции обратного вызова http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=10952

   
Rambler's Top100
вверх

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