Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) 1 [2] 3 4  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Экранирование некоторых HTML тегов
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14962
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 25 дней
Карма: 443




Цитата (Winston @ 7.11.2014 - 23:10)
Ну и я слабо себе представляю ситуацию, что могут смениться теги...

Я так понял, что речь идет не о тэгах, а именно о кодах. Вот сегодня у них [b][/b], а завтра "вожжа под хвост ударила" и решили, что правильнее будет писать [strong][/strong].

Думаю, что кто так решит, тем надо головы оторвать и на правильное место приделать smile.gif Ибо нефиг.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 9 дней
Карма: 552




Цитата (sergeiss @ 7.11.2014 - 21:15)
Думаю, что кто так решит, тем надо головы оторвать и на правильное место приделать  Ибо нефиг

Согласен, но не вижу причин не оставлять поддержку для старых тегов, в данном случае [b]
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев
Карма: 70




Winston
и я тоже мнения =)
посмотрел класс http://phpforum.su/index.php?showtopic=31503
нафигачен на скорую руку)
и костылять надо если вместо <b> делать <strong> и вместо <code> делать <code class="hljs php"> допустим, но если доработать, наверно сгодиться, надо еще потестировать.
Конечно ожидал чего то с меньшим количеством строк =)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев
Карма: 70




Цитата (Winston @ 7.11.2014 - 23:10)
Цитата (Arh @ 7.11.2014 - 21:04)
ваше =)

Не, не мое smile.gif
Цитата (Arh @ 7.11.2014 - 21:04)
ну типа было [b][/b] а потом вдруг стало [strong][/strong]

Ну в таком случае нужно будет решать, либо делать обратную совместимость, либо как написали перелопачивать базу.
Ну и я слабо себе представляю ситуацию, что могут смениться теги... ладно новые иногда появляются, но существующие изменяются... если такое и бывает то ооочень редко.


опечатка, я хотел написать "вЫше" =)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев
Карма: 70




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

class text {
#htmlspecialchars с исключениями
static function htmlspecialchars ($text = '',$tags = array('b','strong','code','div','ul','li','i','u','s','br','a','img','h1','h2','h3','h4','h5','h6')) {
$search = array();
$replace = array();
foreach ($tags as $key => $tag) {
$search1[] = '|<(.*?)'.$tag.'(.*?)>|';
$replace1[] = '◄$1'.$tag.'$2►';
$search2[] = '|◄(.*?)'.$tag.'(.*?)►|';
$replace2[] = '<$1'.$tag.'$2>';
}
return preg_replace($search2, $replace2, htmlspecialchars(
preg_replace($search1, $replace1, $text)
,
ENT_NOQUOTES
));
}
}


$text = '<i>курсив</i> <b>жирный</b> <code class="php">код</code>';
echo text::htmlspecialchars($text,array('code','b'));


Идея в том что разрешенные теги в тексте сначало заменяются на хрень где вместо < стоит ◄, потом этот текст обрабатывается htmlspecialchars , а потом обротно заменяются ◄ на <

Во первых не допру как убрать вторые переменные $search2,$replace2, просто поменять местами массивы не получается из за разделителя |
Во вторых получаются разного рода баги, подозреваю что из за (.*?)
Смысл <(.*?) был в том, что бы поменять теги </b> и <b> одновременно, те у которых есть слеш и те у которых нет, но фиг знает как туда слеш вставить.
Смысл (.*?)> был в том, что бы поменять теги с атрибутами и без.

Код который в примере работает, но например <div><b>жирный</b></div> уже глючит.

Подскажите)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5902
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 23 дня
Карма: 125

Не пью :
22 года, 2 месяца, 25 дней


Цитата (апр @ 7.11.2014 - 18:33)
В базу следует писать как ввели текст, вдруг потом бб-коды сменятся, придется перелопачивать всю базу.

Веский аргумент "вдруг".
Контраргумент: ресурсоемксоть.
  • На странице 15 сообщений; значит и текста на странице в среднем в 15 раз больше, чем в 1 сообщении. Ресурсоемкость регулярок растет не линейно объему текста, а в квадратичной зависимости; значит сервер мы грузим в 15*15=225 раз больше.
  • Сообщение отправляется 1 раз, а просматривается в среднем 1000 раз за год.
То есть, хранение в базе "как ввели" увеличит потребление ресурсов на 5 порядков. Для маленького форумочка на сотню тем и 2 десятка посетителей это не критично. Для большого форума это выльется в необходимость кеширования всего форума до последней страницы.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5902
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 23 дня
Карма: 125

Не пью :
22 года, 2 месяца, 25 дней


И таки да, на этом форуме ББ-теги парсятся на входе, перед записью сообщения в БД.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 5 дней
Карма: 256




Цитата (Arh @ 7.11.2014 - 21:03)
sergeiss
я использую ckeditor, он по умолчанию всё в html делает, может реально проще вырезать всё кроме нужного? как бы применять выборочный htmspecialchars , вопрос как?

Можно такие решения применять:
http://htmlpurifier.org/


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 5 дней
Карма: 256




Цитата (FatCat @ 8.11.2014 - 10:36)
То есть, хранение в базе "как ввели" увеличит потребление ресурсов на 5 порядков. Для маленького форумочка на сотню тем и 2 десятка посетителей это не критично. Для большого форума это выльется в необходимость кеширования всего форума до последней страницы.

можно хранить в одной строке и "сырой" текст сообщения и обработанный.


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5902
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 23 дня
Карма: 125

Не пью :
22 года, 2 месяца, 25 дней


Можно.
Но я не припомню случая, когда бы мне понадобился исходный текст. А удваивать размер базы "на всякий случай" не вижу смысла.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 5 дней
Карма: 256




а пользователи или себе на редактирование когда надо, ты как - назад как то в bb коды из html-а преобразовываешь?


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5902
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 23 дня
Карма: 125

Не пью :
22 года, 2 месяца, 25 дней


Цитата (Michael @ 8.11.2014 - 13:09)
назад как то в bb коды из html-а преобразовываешь?

Да.
Например:
	function convert($in=array( 'TEXT' => "", 'SMILIES' => 0, 'CODE' => 0, 'SIGNATURE' => 0, 'HTML' => 0)) {
// ...
$txt = preg_replace( "#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", $txt );
	function unconvert($txt="", $code=1, $html=0) {
// ...
$txt = preg_replace( "#<b>(.+?)</b>#is" , "\[b\]\\1\[/b\]" , $txt );


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев
Карма: 70




FatCat
Цитата
15*15=225


Вот поэтому я и начал писать лисапед =)

Просто в базу пишется отформатированный текст, с теми тегами, которые были на тот момент разрешены
text::htmlspecialchars($text,array('code','b','i','a'));

А выводиться как есть и больше никаких преобразований/депреобразований

Если через год понадобится разрешить или запретить какой то дополнительный тег - разрешу.
Новые сообщения могут быть добавлены с этими тегами, просто вообще не вижу смысла думать о старых сообщениях, они были оформлены так, как им можно было быть оформленными и если в старых сообщениях чувак пытался вставить картинку, когда ему это было нельзя, она не должна вдруг волшебным образом появиться.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев
Карма: 70




Michael
Цитата
Можно такие решения применять:
http://htmlpurifier.org/


Спасибо, гляну как проснусь)
А по моей регулярке можно что то исправить чтоб заработало? Не хотелось бы подключать слона)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5902
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 23 дня
Карма: 125

Не пью :
22 года, 2 месяца, 25 дней


Цитата (Arh @ 8.11.2014 - 13:37)
поэтому я и начал писать лисапед =)

Для простых парных тегов такое сойдет. А если что-то посложней? Например парсинг картинок? Чтобы чего нехорошего не натолкали...
$txt = preg_replace( "#\[ img\](.+?)\[/img\]#ie", "\$this->regex_check_image('\\1')", $txt );
function regex_check_image
	function regex_check_image($url="") {
global $ibforums;

if (!$url) return;

$url = trim($url);

$default = "[ img]".$url."[/img]";

++
$this->image_count;

// Make sure we've not overriden the set image # limit

if ($ibforums->vars['max_images'])
{
if ($this->image_count > $ibforums->vars['max_images'])
{
$this->error = 'too_many_img';
return $default;
}
}


// Are they attempting to post a dynamic image, or JS?

if ($ibforums->vars['allow_dynamic_img'] != 1)
{
if (preg_match( "/[?&;]/", $url))
{
$this->error = 'no_dynamic';
return $default;
}
if (preg_match( "/javascript(\:|\s)/i", $url ))
{
$this->error = 'no_dynamic';
return $default;
}
}


// Is the img extension allowed to be posted?

if ($ibforums->vars['img_ext'])
{
$extension = preg_replace( "#^.*\.(\S+)$#", "\\1", $url );

$extension = strtolower($extension);

if ( (! $extension) OR ( preg_match( "#/#", $extension ) ) )
{
$this->error = 'invalid_ext';
return $default;
}

$ibforums->vars['img_ext'] = strtolower($ibforums->vars['img_ext']);

if (!preg_match( "/".preg_quote($extension, '/')."(\||$)/", $ibforums->vars['img_ext'] ))
{
$this->error = 'invalid_ext';
return $default;
}
}


// Is it a legitimate image?

if (!preg_match( "/^(http|https|ftp):\/\//i", $url )) {
$this->error = 'no_dynamic';
return $default;
}

// If we are still here....

$url = str_replace( " ", "%20", $url );

return "<img src='$url' border='0' alt='user posted image' />";
}


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) 1 [2] 3 4  Ответ в темуСоздание новой темыСоздание опроса