powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Символ табуляции ломает регулярное выражение.
10 сообщений из 10, страница 1 из 1
(php) Символ табуляции ломает регулярное выражение.
    #37767473
Добрый день.

Пытаюсь сделать у себя на сайте вывод программного кода. Сам текст статьи записывается с использованием html-тегов. Т.е. при написании статьи я вручную ввожу такие тэги как <p>...</p> и т.п. (мне так удобнее, чем с bb-кодами и визуальными редакторами).

Для отображения кода, мне необходимо что бы весь текст внутри блоков <code>...</code> был обработан функцией htmlspecialchars. Причем сами теги <code> и </code> обрабатываться не должны.

Плюс ко всему тег <code> имеет css-свойство class.

Для всего это я использую функцию preg_replace_callback

Перед сохранением в БД производится обработка текста:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$text = preg_replace_callback("/<code class=\"(.*)\">(.*)<\/code>/", array('edit'), $text);

function edit($array)
{

    return $array[1] = '<code class="'.$array[1].'">'.htmlspecialchars($array[2]).'</code>';    

}




И все прекрасно работает.

Но если внутри тегов<code>...</code> будет символ табуляции (переноса строк), функция перестает обрабатывать их содержимое.

Я понимаю, что проблема где то в регулярке, но имею очень мало опыта в их составлении. Подскажите, как это исправить?

Заранее благодарен.
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37767554
Все решилось. Уже помогли.

Вместо (.*) надо было использовать ([\s\S]*?) Тогда все норм
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37767584
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
символ табуляции это не символ переноса строки. Множество "." вроде как включает в себя пробелы и символ табуляции, а вот CR и LF нет.
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37767589
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в чем вообще смысл этого кода?
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777695
Hettсимвол табуляции это не символ переноса строки. Множество "." вроде как включает в себя пробелы и символ табуляции, а вот CR и LF нет.
Да, неправильно выразился, вы правы.

Hettи в чем вообще смысл этого кода?

Комментарий. который добавляет пользователь должен быть безопасным т.е. обработан функцией htmlspecialchars. Но при этом должна быть возможность вставить в него кусочек программного кода. И что бы все отображалось правильно, необходимо из всего комментария интерпретировать только коды <code class="*язык*">...</code>

Как то так, до более простого способа не додумался...
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777742
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант, использовать символы которые не эскейпятся, например []
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777743
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иначе рискуете получить XSS уязвимость
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777764
А можно поподробнее? Что такое xss?
а [] имеете в виду bb-коды?
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777771
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xss в гугле наберите. Я тут хочу сказать, что возможно при обработке тегов <code> есть веростность, что вы составите такое выражение, которое позволит внедрить свой JS код на страницу в виду выборочной обработке содержимого с помощью эсекйп функции. (хотя опять же смотря как вы это реализуете).
Это я сделал вывод исходя из фразы
авторДля отображения кода, мне необходимо что бы весь текст внутри блоков <code>...</code> был обработан функцией htmlspecialchars. Причем сами теги <code> и </code> обрабатываться не должны.

хотя по сути если вы будете использовать стороннюю библиотеку, то остается полагаться только на нее, в данном случае.
...
Рейтинг: 0 / 0
(php) Символ табуляции ломает регулярное выражение.
    #37777794
спасибо буду думать
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Символ табуляции ломает регулярное выражение.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]