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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсер BBS-code, [StrReplace?,Замена текста] 
V
    Опции темы
mishaSL
Дата 26.2.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

<?php

$text= '[a href=www.google.am][font color=#ffffff]Google[/font][/a]';

$reg = '#\[([a-z]+)\s+([a-z]+)=([^\]]+)\](.*)\[/\1\]#U';
while (preg_match($reg, $text) != 0) {
    $text = preg_replace('#\[([a-z]+)\s+([a-z]+)=([^\]]+)\](.*)\[/\1\]#U','<$1 $2="$3">$4</$1>',$text);
}
print $text;

?>


А вообще лучше изучить работу регулярных выражений.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
NNaarreekk
Дата 26.2.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mishaSL @  26.2.2008,  13:18 Найти цитируемый пост)
А вообще лучше изучить работу регулярных выражений. 

Не сыпте соль на рану :(:(:(

Я нефига не понимаю в регулярных выражениях, уже год пытаюсь учить smile  smile  smile 
За код спасибо!

Но в этом случае если чел напишет скжем
Код

$text="[script type=text/Javascript]alert(this)[/script]";


Код все равно сработает, я прав?


Хотя легче в отдельности проверить естц ли в коде что нибудь подобное! smile 
PM MAIL WWW   Вверх
mishaSL
Дата 26.2.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(NNaarreekk @  26.2.2008,  13:37 Найти цитируемый пост)
Код все равно сработает, я прав?

Хотя легче в отдельности проверить естц ли в коде что нибудь подобное!


Да. Вы правы. Это был пример для вашего случая. Если делать более менее нормально, то нужно создать массив с разрешенными тегами и заменять только, то что нужно. К примеру так:

Код

<?php
// допустим этот текст пришел от пользователя. К примеру так: $text = $_POST['text'];
$text= '[script]alert();[/script][a href=www.google.am][font color=#ff0000]Google[/font][/a]';
// вырезали теги, можно еще проверок добавить на всякий случай.
$text = strip_tags($text);
//массив с поиском
$arrSearch = array('#\[a\s+href=([^\]]+)\](.*)\[/a\]#U',
                   '#\[font\s+color=([^\]]+)\](.*)\[/font\]#U',
                   '#\[b\](.*)\[/b\]#U',
                   '#\[u\](.*)\[/u\]#U'  
                    );
//массив с заменами
$arrReplace = array('<a href="$1">$2</a>',
                   '<font color="$1">$2</font>',
                   '<b>$1</b>',
                   '<u>$2</u>'
                    );
//делаем замену                    
$text = preg_replace($arrSearch,$arrReplace,$text);
//убираем лишние bb коды, если они есть
$text = preg_replace('#\[.*\]#isU', '', $text);
print $text;
?>




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
NNaarreekk
Дата 26.2.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



mishaSL, код то что доктор прописал!

Спасибо большое!

Добавлено через 4 минуты и 18 секунд
ЛЮДИ НАШЕЛ ИНТЕРЕСНУЮ ВЕШЬ ПРО РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ!
PM MAIL WWW   Вверх
mishaSL
Дата 26.2.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(NNaarreekk @  26.2.2008,  14:07 Найти цитируемый пост)
Спасибо большое!

Всегда пожалуйстаsmile


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
NNaarreekk
Дата 27.2.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще один вопросик и тему можно считаь закрытым!
Код
 
$text=preg_replace('#\[FONT\s+color=([^\]]+)\](.*)\[/font\]#U','<font color="$1">$2</font>',$text);

Kaк можно сделать, чтоб не учитывался регистр?
Пробовал:
Код
 
$text=preg_replace('#\[FONT/i\s+color=([^\]]+)\](.*)\[/font/i\]#U','<font color="$1">$2</font>',$text); 
$text=preg_replace('#\[(FONT)/i\s+color=([^\]]+)\](.*)\[/(font)/i\]#U','<font color="$1">$2</font>',$text);
//Даже пробовал
 $text=preg_replace('#\[[(FONT)(font)]\s+color=([^\]]+)\](.*)\[/[(FONT)(font)]\]#U','<font color="$1">$2</font>',$text);


Никак smile 
PM MAIL WWW   Вверх
mishaSL
Дата 27.2.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(NNaarreekk @  27.2.2008,  16:28 Найти цитируемый пост)
Kaк можно сделать, чтоб не учитывался регистр?

Вот так:
Код

<?php
// допустим этот текст пришел от пользователя. К примеру так: $text = $_POST['text'];
$text= '[script]alert();[/script][a href=www.google.am][font color=#ff0000]Google[/font][/a]';
// вырезали теги, можно еще проверок добавить на всякий случай.
$text = strip_tags($text);
//массив с поиском
$arrSearch = array('#\[a\s+href=([^\]]+)\](.*)\[/a\]#iU',
                   '#\[font\s+color=([^\]]+)\](.*)\[/font\]#iU',
                   '#\[b\](.*)\[/b\]#iU',
                   '#\[u\](.*)\[/u\]#iU'  
                    );
//массив с заменами
$arrReplace = array('<a href="$1">$2</a>',
                   '<font color="$1">$2</font>',
                   '<b>$1</b>',
                   '<u>$2</u>'
                    );
//делаем замену                    
$text = preg_replace($arrSearch,$arrReplace,$text);
//убираем лишние bb коды, если они есть
$text = preg_replace('#\[.*\]#isU', '', $text);
print $text;
?>


Добавлено через 1 минуту и 44 секунды
NNaarreekk, т.е. модификатор "i".
Подробнее


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
NNaarreekk
Дата 27.2.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, ну все попробовал кроме этого i в конце! smile 

Еще раз спасибо!

Наверно уже темку закрою!

Это сообщение отредактировал(а) NNaarreekk - 27.2.2008, 18:30
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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