Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> preg_replace - замена тегов. Замена тегов и изменить размер картинки. 
V
    Опции темы
sayber
  Дата 30.1.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Поиском пользовался.

Добрый вечер.

Нужна регулярка - но не могу понять как ее написать.
Задача: В данных из БД (из текста) заменить все теги <p> на <br>

Пример:
В БД
Код

текст <p>текст текст</p> текст текст текст <p>текст текст</p> текст текст текст текст 


В итоге результат должен быть:

Код

текст <br />текст текст <br /> текст текст текст <br />текст текст <br /> текст текст текст текст 


Я делаю тупо 

Код

$row['text']= preg_replace('(<p>)', '<br />', $row['text']);
$row['text'] = preg_replace('(</p>)', '<br />', $row['text']);



А вот вторая задача.
Из той же БД выводится тот же текст. В нем есть картинка <img src="...." align="left">

Как мне ее найти и превратить это в <img src="...." align="left" height="115"  weight="....">  ширина вычисляется за счет высоты.
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
sayber
Дата 31.1.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



С тегами <P> решил проблему

Код

$text = preg_replace("(\<(/?[p]+)\>)","<br />", $text);



Остается проблемма с картинками.


Цитата

есть картинка <img src="...." align="left">

Как мне ее найти и превратить это в <img src="...." align="left" height="115"  weight="....">  ширина вычисляется за счет высоты.

--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
Sannis
Дата 31.1.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: 6
Всего: 13



Непонятно задаете вопрос, но попробуйте так:
Код

$text = preg_replace("#<img src=\"([^\"]+)\" align=\"left\">#","<img src=\"\\1\" align=\"left\" height=\"115\"  weight=\"....\">", $text);

Что имеется в виду под
Цитата(sayber @  31.1.2008,  00:46 Найти цитируемый пост)
ширина вычисляется за счет высоты.
?


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
sayber
Дата 31.1.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Это просто первьюшка на php/

А если в img будут еще какие то параметры. Ну к примеру class.
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
Sannis
Дата 31.1.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: 6
Всего: 13



Цитата(sayber @  31.1.2008,  09:33 Найти цитируемый пост)
А если в img будут еще какие то параметры. Ну к примеру class.

Тогда зависит от того, насколько произволен порядок аттрибутов. Например так:
Код

$text = preg_replace("#<img(.*?) src=\"([^\"]+)\"(.*?) align=\"left\">#","<img\\1 src=\"\\2\"\\3 align=\"left\" height=\"115\"  weight=\"....\">", $text);




--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
sayber
Дата 31.1.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Не работает (((

У меня картинки такого плана идут

<img align="left" src="1201694579_14.jpg" style="border: none;"  alt='бла-бла!' title='ля-ля'  />

А получися в итоге

<img align="left" src="1201694579_14.jpg" style="border: none;"  alt='бла-бла!' title='ля-ля' height="115"   weight="..." />
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
Sannis
Дата 31.1.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: 6
Всего: 13



Какая стояла задача, такой и ответ, работает верно. Вы же не ответили на впрос про "вычисление height".


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Golda
Дата 1.2.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



sayber, картинка там одна? Добавлять height = 115 к любой встреченной картинке? Или есть какой-то признак? Поскольку порядок аттрибутов не имеет значения, вставляйте в начало. Если заменять можно <img> любой картинки и значение 115 подходит для всех, можно, например, так

Код

preg_replace('/<img\s+/', '<img height="115" ', $str) 


А если уверены, что внутри тегов используются только пробелы, без табуляций и переводов строк, то и регулярка не нужна

Код

str_replace  ('<img ', '<img height="115" ', $str)


Если этот аттрибут мог присутствовать, чтобы не продублировать, чуть-чуть усложним

Код

$str = '<img src="http://www.gmail.com"/> <img width="15" height="5" src="/img.gif" />';
if (preg_match('/<img[^>]+height=/', $str)) {
    $str = preg_replace('#<img([^>]+)height=([^>\s/]+)#', '<img \\1', $str);
}
$str = preg_replace('/<img\s+/', '<img height="115" ', $str); 

echo $str;


Это сообщение отредактировал(а) Golda - 1.2.2008, 00:16


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
sayber
Дата 3.2.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Спасибо!
Golda, 
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
MAVZ
Дата 24.2.2009, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



Помогите пожалуйста!

Мне нужно в строке все встречающиеся последовательности типа "<img src="path/image.gif">" заменить на "<img src="mainpath/path/image.gif">" при этом не обязательно будет <img src=""> может быть и например <img name="" src=""> - такие элементы тоже надо корректно заменить. 

Подскажите пожалуйста как это можно сделать ?


PM MAIL   Вверх
NewDima
Дата 24.2.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Код

<?php
$text = '
<img height = 123 src="path/image.gif" width=1>
';
$preg = '#<img(.*)src="?(path/[\w\.]+)"?([^>]*)>#';
echo preg_replace($preg, '<img$1src="mainpath/$2"$3>', $text);
$text
?>


Это сообщение отредактировал(а) NewDima - 24.2.2009, 09:35
PM ICQ   Вверх
MAVZ
  Дата 9.3.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



NewDima, спасибо!

Я немного модифицировал код, чтобы он работал в разных случаях, например чтобы корректно отрабатывал случаи, когда имя файла состоит из цифр, а также когда внутри тега <IMG> встречается перевод строки.

Во что у меня получилось: 

Код

$preg = '/<img(.*?)src="?([^"]+)"?([^>]*)>/is';
$result_content = preg_replace($preg, "<img$1src=\"$imagedir/$2\"$3>", $result_content);


$result_content - большая строка с содержимым HTML файла
В файле путь ко всем картинкам прописан от директории, где лежит сам HTML файл

$imagedir - путь к картинкам на сервере, например /library/book1/article2

Надеюсь еще кому-нибудь пригодится. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.