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

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

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

 

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

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

тема: Замена адресов изображений в строке
 
 автор: pautina   (06.01.2012 в 08:57)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
У меня есть строка которая содержит html код
img height=p align=Осветление Изображение было удалено автором, я нашёл для вас ссылку на изображение девушки авиатора или вы можете использовать свои изображения, или сами поискать на стоковых сайтах.

[поправлено модератором: объемный код пожалуйста прикрепляйте в виде файла]

  Ответить  
 
 автор: cheops   (06.01.2012 в 12:55)   письмо автору
 
   для: pautina   (06.01.2012 в 08:57)
 

Если честно пока не очень понятно. Здесь нужно задействовать как-то MySQL?

  Ответить  
 
 автор: pautina   (06.01.2012 в 13:53)   письмо автору
 
   для: cheops   (06.01.2012 в 12:55)
 

Смотрите у меня есть строка str в ней содержится html код
в строке содержащий html код есть теги рисунков <img height="272" src="/lessons/les1677/20.jpg" width="450" /> мне хотелось бы во всех этих тегах заменить src на src="images/lessons/les1677/20.jpg"
для этого использую код

<?php  
 $str 
'<p><strong><a href="/lessons.php">Уроки Photoshop</a></strong> &#187; <strong><a href="/lessons.php?rub=1">Рубрика: Эффекты</a></strong></p><br />
<h1 style="text-align:center">Создай экспрессивную космическую иллюстрацию в Фотошоп</h1><p>    
<p align="center">
    <img height="547" src="/lessons/les1677/1.jpg" width="450" /></p>
<p align="center">
    <img height="272" src="/lessons/les1677/5.jpg" width="450" /></p>
<p align="center">
    <img height="272" src="/lessons/les1677/6.jpg" width="450" /></p>
<p>
    <strong>ШАГ 4. </strong>Переходим на слой-маску и на слой-маске прокрашиваем чёрной кистью непрозрачностью 20% края изображения, чтобы совместить с нашим чёрным задним фоном.</p>
<p align="center"> ...'
;      
     
preg_match_all('#src="([^"]+)"#i'$str$matches); // показывает ссылку для изображения
     
$matches[0] = str_replace('src="/lessons''src="/images/lessons'$matches[0]); // к адресу ссылки прибавляем images
     
$matches[0] = str_replace('src="tools''src="/images/tools'$matches[0]); // к адресу ссылки прибавляем images
     
$adr_img $matches[0];
     
$str2 str_replace($adr_img'src="/images/lessons'$str);     
 echo 
'<pre>';  
 
print_r($str2); 
?>

Но замены не происходит, не взгляните код?

  Ответить  
 
 автор: .....   (06.01.2012 в 20:39)
 
   для: pautina   (06.01.2012 в 13:53)
 

типа такого, .... может быть
<?php
header
('content-type: text/plain');  

 
$str '<p><strong><a href="/lessons.php">Уроки Photoshop</a></strong> &#187; <strong><a href="/lessons.php?rub=1">Рубрика: Эффекты</a></strong></p><br /> 
<h1 style="text-align:center">Создай экспрессивную космическую иллюстрацию в Фотошоп</h1><p>     
<p align="center"> 
    <img height="547" src="/lessons/les1677/1.jpg" width="450" /></p> 
 ...'
;       
   echo 
$strpreg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i''$1/images/lessons/'$str); 

  Ответить  
 
 автор: pautina   (07.01.2012 в 09:30)   письмо автору
 
   для: .....   (06.01.2012 в 20:39)
 

Спасибо всё меняется, скажите а как можно изменить кодировку в коде на Кирилица windows
header('content-type: text/plain');  

1)
Что то в header нужно добавить.
А то у меня сейчас так получается скрипт выполняется делает замену код-ка скрипта utf-8, как я просматриваю вывод строки символы строки выводятся иероглифами (для русского текста), чтоб символы выводились на русском нужно изменить кодировку скрипта на Кирилица Windows, после этого строка выводится как надо, но вот сам код скрипта после закрытия файла, выводится иероглифами для русского языка, т.е. если потом открываем этот скрипт в dreamweaver русские символы выводятся иеролифами.

2)
Есть ещё вот какой вопрос
В коде строки иногда могут попадатся маленькие рисунки адрес у которых src="tools/Elliptical Marquee.jpg" width="27"
Какое регулярное выражение здесь составить чтоб заменить эту строку на src="images/tools/Elliptical Marquee.jpg" width="27"

  Ответить  
 
 автор: .....   (07.01.2012 в 12:33)
 
   для: pautina   (07.01.2012 в 09:30)
 

1.
. header('Content-type: text/plain; charset=utf-8');

2
. по разному бывает , бывает что и важные данные теряются при ошибках в выражении :)
. главное не перезаписывать данные, пока не найдено и полностью не проверено
. окончательное решение :)
2.a
. использовать preg_replace_callback() cо слегка изменённым выражением
. и функцией возвращающей разные варианты взависимости от найденных совпадений
2.b
. применить в prerg_replace() модификатор /e и в строке замены использовать елемент массива по индексу
2.c
. передать массивы в качестве первых двух параметров prerg_replace()
2.d
. вызывать prerg_replace() требуемое колличество раз
2....

// вроде 2a быстрее , но больше кода
// 2.b самый краткий вариант , иногда самый медленный
// 2.c и 2.d почти одно и то-же

  Ответить  
 
 автор: pautina   (07.01.2012 в 15:42)   письмо автору
 
   для: .....   (07.01.2012 в 12:33)
 

По записи регулярного выражения

$str= preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $str); // Замена адреса изображения в строке 
     // <img height="547" src="/lessons/les1677/1.jpg" width="450" /> меняется на  
     // <img height="547" src="/images/lessons/les1677/1.jpg" width="450" />

Это регулярное выражение делает замену <img height="547" src="/lessons/les1677/1.jpg" width="450" /> на <img height="547" src="/images/lessons/les1677/1.jpg" width="450" />
Мне нужно написать регулярное выражение которое бы тег
<img height="23" src="tools/Elliptical Marquee.jpg" width="27" /> заменяло на
<img height="23" src="images/tools/Elliptical Marquee.jpg" width="27" />

  Ответить  
 
 автор: pautina   (08.01.2012 в 19:09)   письмо автору
 
   для: pautina   (07.01.2012 в 15:42)
 

Извиняюсь.
Этот участок кода нужно использовать.

$str= preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $str); // Замена адреса изображения в строке 
     // <img height="547" src="/lessons/les1677/1.jpg" width="450" /> менняется на  
     // <img height="547" src="/images/lessons/les1677/1.jpg" width="450" />
     $str= preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)tools/#i', '$1/images/tools/', $str);

  Ответить  
Rambler's Top100
вверх

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