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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пишу небольшой сайтик, Есть сомнения в своих знаниях, прошу пом 
V
    Опции темы
garden
Дата 2.11.2007, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.

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

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

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

Цитата

- strip_tags();
- mysql_real_escape_string();


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

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

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

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

Текст
Текст


Текст
Текст


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

Текст
Текст

Текст
Текст

PM MAIL   Вверх
skyboy
Дата 2.11.2007, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

PM MAIL   Вверх
garden
Дата 2.11.2007, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

P.S. Не хотел засорять своими вопросами форум, решил создать только одну тему. На будущее - буду знать.
PM MAIL   Вверх
skyboy
Дата 2.11.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

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

возможно, понадобится модификатор u, если ты испольщуешь UTF-8
PM MAIL   Вверх
garden
Дата 2.11.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.

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

Код

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

PM MAIL   Вверх
flashaa
Дата 2.11.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



str_ireplace намного быстрее в случае простой замены, чем регулярка.
PM MAIL   Вверх
skyboy
Дата 2.11.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

Это сообщение отредактировал(а) skyboy - 2.11.2007, 18:12
PM MAIL   Вверх
flashaa
Дата 2.11.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


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

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