Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Пишу небольшой сайтик


Автор: garden 2.11.2007, 01:48
Здравствуйте.

Пишу небольшой сайтик для себя, время от времени у меня возникают небольшие вопросы, по большей части, касающиеся безопасности, если Вам будет не трудно - помогите советом.

Первый вопрос у меня следующий:

Каким образом "обезопасить" текст статьи/комментариев, которые оставил пользователь?
Сейчас, перед добавлением в базу mysql я пропускаю текст через следующие функции:

Цитата

- strip_tags();
- mysql_real_escape_string();


Достаточно ли этого или же необходимо сделать еще что-то?

Второй вопросик:

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

Пример исходного текста:
Цитата

Текст
Текст


Текст
Текст


Нужно получить:
Цитата

Текст
Текст

Текст
Текст

Автор: skyboy 2.11.2007, 02:14
на будущее: каждый вопрос создавай в отдельной теме, ладно?
при соxранении в БД достаточно только mysql_real_escape_string. никакой изменяющей содержимое обработки(например, strip_tags) делать не надо - вдруг потом надо будет оригинал?
перед выводом htmlspecialchars - коль кто захочет вставить теги, увидит только код.

Автор: garden 2.11.2007, 02:23
Спасибо большое, так и сделаю.
Остался только вопрос, как вырезать лишние переносы строк в тексте? Дело в том, что при выводе из базы, текст пропускаю через функцию nl2br(). Лишние переносы -> лишние <br /> и некрасивый внешний вид текста.

P.S. Не хотел засорять своими вопросами форум, решил создать только одну тему. На будущее - буду знать.

Автор: skyboy 2.11.2007, 09:32
используй регулярные выражение.
вроде такого:
Код

$text= preg_replace("/\n{2,}/","\n",$text);

возможно, понадобится http://www.php.net/manual/ru/reference.pcre.pattern.modifiers.php u, если ты испольщуешь UTF-8

Автор: garden 2.11.2007, 13:41
Спасибо.

Но, пришлось чуть-чуть подправить. Работать стало следующее:

Код

$string = preg_replace("/[\n\r]{2,}/","\n\r\n\r",$string);

Автор: flashaa 2.11.2007, 17:26
str_ireplace намного быстрее в случае простой замены, чем регулярка.

Автор: skyboy 2.11.2007, 18:12
flashaa, угу. только как должны выглядеть замена?
меняем "\n\r\n\r" на "\n\r"?в таком случае "str_ireplace" сделает из трех переносов два. значит для того, чтоб точно обработать 4-х, 5-ти и более-кратные переносы надо запускать цикл. Причем, не фиксированное количество раз, а до тех пор, пока текст не перестанет меняться или пока поиск двухкратного переноса не прекратит находить вхождения. 
Почему-то мне кажется, что регулярные выражения, выполняемые "на уровне ядра РНР" выполняться быстрее, чем цикл по тексту, выполняемый на уровне интерпретируемого скрипта...

Автор: flashaa 2.11.2007, 18:13
Согласен, не подумал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)