Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Snakeskin (https://javascript.ru/forum/project/35057-snakeskin.html)

MakeMeFeel 09.09.2015 14:37

а как экранировать вывод html кроме <br>? например: есть текст и в нем \n переносы строк, если написать так:
{content|br}, то вместо <br> мы получим &lt;br&gt;

отэкранируются все символы, а нужно все, кроме <br>

MakeMeFeel 09.09.2015 14:42

если написать так:
{content|br|!html}
то получится натуральная XSS

Что нужно написать в фильтр, чтобы не получить дыру в сайте и переводить строку?

trikadin 09.09.2015 15:22

MakeMeFeel,
- block tpl->outputWithBr(text)
  : paragraphs = text.split('\n')
  - forEach paragraphs -> p
    {p}
    < br

trikadin 09.09.2015 15:25

Ну и, соответственно, создаёшь темплейт tpl, где и юзаешь активно этот блок)

trikadin 09.09.2015 15:28

А правильно, конечно, вот так:

- block tpl->p(text)
  : paragraphs = text.split('\n')
  - forEach paragraphs -> p
    < p
      {p}

MakeMeFeel 09.09.2015 16:16

trikadin,
это весь текст нужно отпарсить, что это за жесть?

Сначала применяем фильтр на html, а затем грабли на перевод строки? Проще тогда дрюкать в браузере пользователя, чтобы сервер не упарывать.

Механизма встроенного, порядка фильтров например, нету? типа как в php nl2br?

, а и спасибо за пример.

trikadin 09.09.2015 16:21

MakeMeFeel, эээм, в чём проблема? Где нужно отпарсить какой текст? Не понял тебя)

MakeMeFeel 09.09.2015 16:26

Цитата:

Сообщение от trikadin
эээм, в чём проблема?

Наверное в том, что это какой-то дикий костыль.

вместо записи: {content|nl2br} ты предложил писать весь твой код в блоке.

Как минимум нужно запихать твой код в фильтр. Но мне интересно, есть ли встроенных nl2br? чтобы его не писать. Для меня странно, что его нет или я что-то упустил?

Я уж не говорю о том, что ты навязываешь мне использование тега p

MakeMeFeel 09.09.2015 16:29

Страннее всего, что нет html2br, экранировать всё, а переносы гнать в <br>

trikadin 09.09.2015 16:31

MakeMeFeel, если тебе принципиально сделать это фильтрами, то легко:

{text |html |replace '\n', '<br>' |!html}


Но это плохой вариант.


Часовой пояс GMT +3, время: 09:53.