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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> htmlspecialchars между двумя тэгами, регулярные выражения 
V
    Опции темы
azesmcar
Дата 16.7.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Добрый день,

Нужно заменить html символы в строке, между двумя тагами.
Например
Цитата

<strong>test</strong>
<pre>
<h1>heading</h1>
<b>hello world</b>

</pre>

т.е. заменить только в выделенной части текста, как это сделать?
Решение в лоб я знаю, хочеться красиво, регулярками, но я в них совершенно ничего не понимаю. 

Пытаюсь изменить один пример регулярок

ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $text);
меняю
:// на <pre> не работает, заменяю на букву любую, все равно не работает, совсем запутался, нихрена не пойму.

Заранее спасибо.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

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



нужно позаменять типа &amp; и т.д?


или нужно просто текст между тегами <pre></pre> заменить?

тогда типа того
Код

preg_replace('#(?:<pre>)((?:\r\n)?(?:(?:.*?)(?:\r\n)?)*?)(?:</pre>)#', 'XXX', $text);


Это сообщение отредактировал(а) patap - 16.7.2009, 14:16


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
unicross
Дата 16.7.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

<?php
$html = '<strong>test</strong>
<pre>
<h1>heading</h1>
<b>hello world</b>
</pre>
<strong>test</strong>
<pre>
<h1>heading</h1>
<b>hello world</b>
</pre>
';

// Вариант 1
$pattern = '#(<pre>)(.*?)(</pre>)#ise';
$repl = "'$1' . htmlspecialchars('$2') . '$3'";
$result = preg_replace($pattern, $repl, $html);
echo $result;

// Вариант 2
function replace($arr) {
   return $arr[1] . htmlspecialchars($arr[2]) . $arr[3];
}
$pattern = '#(<pre>)(.*?)(</pre>)#is';
$str = preg_replace_callback($pattern, "replace", $html);
echo $str;
?>

PM MAIL WWW   Вверх
azesmcar
Дата 16.7.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



patap

Точно, search pattern четко работает, а как сделать чтобы он htmlspecialchars вызывал?
типа этого
Код

preg_replace('#(?:<pre>)((?:\r\n)?(?:(?:.*?)(?:\r\n)?)*?)(?:</pre>)#', 'htmlspecialchars(\\0)', $text);


Добавлено через 2 минуты и 6 секунд
unicross

smile гениально!
У меня такое ощущение что я этому никогда не научись. (смотрю в книгу вижу фигу), ни хрена не понимаю из написанного, но работает на ура smile 

Спасибо.
PM   Вверх
azesmcar
Дата 16.7.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



unicross

У кода есть один побочный эффект. Он заменяет двойные ковычки " на \"
Даже если заменить
$repl = "'$1 $2 $3'";
непонятна причина. Как это исправить?

Добавлено через 4 минуты и 23 секунды
второй вариант этого не делает, ложная тревога (хотя мне первый больше подходит).
PM   Вверх
unicross
Дата 16.7.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar)
непонятна причина. Как это исправить?

azesmcar, в этом и состоит минус использования модификатора e... smile  Все найденные подмаски автоматически проходят через функцию addslashes() до передачи в шаблон замены... Таким нелепым способом разработчики пытались избавиться от ошибок с кавычками и апострофами. По этой причине лучше использовать второй вариант...  smile 
PM MAIL WWW   Вверх
azesmcar
Дата 16.7.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(unicross @  16.7.2009,  15:46 Найти цитируемый пост)
azesmcar, в этом и состоит минус использования модификатора e... smile  Все найденные подмаски автоматически проходят через функцию addslashes() до передачи в шаблон замены... Таким нелепым способом разработчики пытались избавиться от ошибок с кавычками и апострофами. По этой причине лучше использовать второй вариант...  smile  

ага, методом проб, ошибок и научного тыка я добрался до истины smile 
надо бы книгу взять и почитать, но мне это не так часто бывает нужным
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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