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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно обрабатывать бб коды 
:(
    Опции темы
nepster
Дата 10.12.2010, 17:25 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

function replaceBBCodes($text){ 
    
$text=str_replace("/\n/m", "$0<br/>", $text);
        
$text = htmlspecialchars($text);
    
$text=nl2br($text);

$text=stripslashes($text);   

$text=str_replace("!#3040#!", "&", $text);
$text=str_replace('!#3050#!', '"', $text);
$text=str_replace('!#3060#!', "<", $text);
$text=str_replace('!#3070#!', ">", $text);
$text=str_replace('!#3080#!', "'", $text);

$text=str_replace("", '<strong>', $text);
$text=str_replace("
", '</strong>', $text);

$text=str_replace('[i]', '<em>', $text);
$text=str_replace('[/i]', '</em>', $text);

$text=str_replace('[u]', '<u>', $text);
$text=str_replace('[/u]', '</u>', $text);

$text=str_replace('[s]', '<s>', $text);
$text=str_replace('[/s]', '</s>', $text);
    
$text=str_replace('[left]', '<span class="bb_left">', $text);
$text=str_replace('[/left]', '</span>', $text);
        
$text=str_replace('[right]', '<span class="bb_right">', $text);
$text=str_replace('[/right]', '</span>', $text);
        
$text=str_replace('[center]', '<span class="bb_center">', $text);
$text=str_replace('[/center]', '</span>', $text);
        
$text=str_replace('[justify]', '<span class="bb_justify">', $text);
$text=str_replace('[/justify]', '</span>', $text);
                
$text=preg_replace("#\[color=(.*?)](.*?)\[/color\]#si", '<span style="color:$1">$2</span>',$text);

$text=preg_replace("#\[size=(.*?)](.*?)\[/size\]#si", '<span style="font-size:$1px">$2</span>',$text);

$text=preg_replace("#\[a=(.*?)](.*?)\[/a\]#si", '<a href="$1">$2</a>',$text);
        
$text=preg_replace("#\[img=(.*?)](.*?)\[/img\]#si", '<img src="$2" alt="images" style="float:$1;margin:5px;" />',$text);
            
$text=preg_replace("#\[youtube](.*?)\[/youtube\]#si",'<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/$1"></param><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350"></embed></object>',$text);
        
$text=preg_replace("#\[spoiler=(.*?)](.*?)\[/spoiler\]#si", '<div id=\'video\'><h1 class="headtt2" onclick="expandit(this)">$1</h1>
<div style="display:none;" class="sdsp">         $2</div> </div>', $text);
        
$text=preg_replace("#\[podspoiler=(.*?)](.*?)\[/podspoiler\]#si", '<h1 class="headtt" onclick="expandit(this)">$1</h1>
<div style="display:none;text-align:center">$2</div>', $text);

return $text; 

} 
    



Собственно написать обработчик бб кодов, все по валидности html. Но этот исходник кинули на ###код, где стали говорить, что все через ж. 


Сразу хочу сказать, что новость добавляется через ajax скрипт, который не хочет отправлять текст со следующими символами, поэтому в js  я их заменил на придуманный код, а после того как данные попадают в скрипт, я возвращаю их прежний вид.
Код

$text=str_replace("!#3040#!", "&", $text);
$text=str_replace('!#3050#!', '"', $text);
$text=str_replace('!#3060#!', "<", $text);
$text=str_replace('!#3070#!', ">", $text);
$text=str_replace('!#3080#!', "'", $text);



вот комменты http://govnokod.ru/4889 


Хотелось бы узнать, как правильно обрабатывать bb коды, так же такое 

Код

не знает, что существуют FST


Добавлено @ 17:27
17 - 18 строка ваш скрипт чего то убирает  

Это сообщение отредактировал(а) nepster - 10.12.2010, 17:29
PM MAIL   Вверх
skyboy
Дата 10.12.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



ммм, мне тоже интересно, что такое FST.
существуют стандартные решения: PECL'овский BBcode Extension и PEAR'овский HTML_BBCodeParser
Цитата(nepster @  10.12.2010,  16:25 Найти цитируемый пост)
$text=str_replace("/\n/m", "$0<br/>", $text);

не будет работать, как ожидается. потому как preg_replace и str_replace - совсем разные функции.
Цитата(nepster @  10.12.2010,  16:25 Найти цитируемый пост)
новость добавляется через ajax скрипт, который не хочет отправлять текст со следующими символами

у всех нормально отправляется. мог бы и решить проблему вместо вставки костылей.
Цитата(nepster @  10.12.2010,  16:25 Найти цитируемый пост)
Собственно написать обработчик бб кодов, все по валидности html

тут, кста, пропущено одно или несколько слов. наверное, от усталости.

Добавлено через 2 минуты и 1 секунду
Цитата(nepster @  10.12.2010,  16:25 Найти цитируемый пост)
17 - 18 строка ваш скрипт чего то убирает  

парсер на форуме допускает тег жирного текста(b) внутри тега кода(code) для выделения фрагментов. так что "не убирает", а заменяет.
PM MAIL   Вверх
nepster
Дата 10.12.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Большое спасибо 

Код

у всех нормально отправляется. мог бы и решить проблему вместо вставки костылей.


у меня она почему то скрипту передает текст, но когда встречает амперсанд, то передает весь текст до амперсанда, а остальное просто режет. Я решил особо не напрягаться и сделать так. 
PM MAIL   Вверх
skyboy
Дата 11.12.2010, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(nepster @  10.12.2010,  18:13 Найти цитируемый пост)
то передает весь текст до амперсанда

для передачи от-руки-набранного-текста давно используется POST, а не GET - потому что в GET есть ограничение на размер и ограничение зависит от браузера. это раз. видеть длиннющую лапшу в адресной строке - просто некрасиво. это два. ну, ещё другие мелочи есть. кроме того, при меотде GET амперсанд играет роль разделителя параметров. следовательно, до первого & считается отправленным текстом, а после первого же амперсанда - новым параметром.
PM MAIL   Вверх
nepster
Дата 11.12.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ajax, в общем используя этот метод передачи, он обижается на некоторые символы, но думаю такое решение сильно обидно ))) 

Код

function send(section) {
news = document.getElementById("news").value;

news = news.replace(/\&/g, '!#3040#!');
news = news.replace(/\"/g, '!#3050#!');
news = news.replace(/\</g, '!#3060#!');
news = news.replace(/\>/g, '!#3070#!');
news = news.replace(/\'/g, '!#3080#!');


if (req) {
    req.onreadystatechange = function() {
    if(req.readyState == 1) {document.getElementById("edit_news").innerHTML = '<img src="/data/adm_content/img/loading.gif" alt="loading" class="loadings_regs2" />';}
     if (req.readyState == 4 && req.status == 200)  { document.getElementById("edit_news").innerHTML = req.responseText;}        
    };  
    
    req.open("POST", '/data/adm_content/admin_result.php', true);
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send('news='+news+'&section='+section);
    } 
else alert("Браузер не поддерживает AJAX");

}

PM MAIL   Вверх
bars80080
Дата 11.12.2010, 19:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(nepster @  11.12.2010,  12:32 Найти цитируемый пост)
ajax, в общем используя этот метод передачи, он обижается на некоторые символы, но думаю такое решение сильно обидно ))) 

по-моему, в любом ЯП работающем с вэбом есть готовые функции корректного кодирования проблемных символов

в javascript это функция encodeURIComponent(). пропускаешь через неё свой news и получаешь в нужном виде. при приёме на пхп останется только сконвертировать в обратную сторону rawurldecode()
PM MAIL WWW   Вверх
nepster
Дата 12.12.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



понял спасибо ) со временем исправлю. 
PM MAIL   Вверх
Shark
Дата 5.1.2011, 13:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А не проще ли это:
Код

    
$text=str_replace('[left]', '<span class="bb_left">', $text);
$text=str_replace('[/left]', '</span>', $text);
        
$text=str_replace('[right]', '<span class="bb_right">', $text);
$text=str_replace('[/right]', '</span>', $text);
        
$text=str_replace('[center]', '<span class="bb_center">', $text);
$text=str_replace('[/center]', '</span>', $text);
        
$text=str_replace('[justify]', '<span class="bb_justify">', $text);
$text=str_replace('[/justify]', '</span>', $text);
            

заменить на это:
Код

$text=preg_replace( '/\[align=(.*)\]/isU', '<div align=\'\\1\'>', $text);
$text=str_replace("[/align]","</div>",$text);


или у тебя именно ввод идет [right]текст[/right] и т.д. ?


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


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

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