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


Автор: HappyMan 11.9.2005, 16:02
пишу чат. Сообщени в записывается в MySQL, потом считывается.

Итак, что мне нужно:
1) чтоб при написании <b>test</b> он не выделял бы текст при выводе (игнорирование тегов)
2) защита от SQL-иньекций
3) правильное отображение спец. символов: ;%: )+...
4) Чтобы выделялся текст между test (т.е поддерживаются мои теги, как например тут на форуме)
+еще что-то, забыл...

запутался между:
mysql_real_escape_string
stripslashes
htmlspecialchars
rawurldecode
rawurlencode

очень важно: особенно меня интересует последовательность применения данных ф-ций!

Возможно вопрос поднимался, но я не нашел. буду рад ссылке

Автор: alligator 11.9.2005, 16:11
1)теги можешь обрабатывать регулярками
2)вырезаешь из стоки символ " ' " или заменяешь на `
3) незнаю =)
4)регулярки регулярки =)) поищи на форуме были такие темы
stripslashes убирает слеши из строки
htmlspecialchars перекодирует симповолы
например '&' преобразуется в '&amp;
Добавлено @ 16:20
http://forum.codenet.ru/showthread.php?threadid=24906
Добавлено @ 16:21
Вот еще глянь http://forum.vingrad.ru/index.php?showtopic=63758

Автор: HappyMan 11.9.2005, 16:30
alligator
нашел там где-то вот такую вещь:
http://wackowiki.com/WackoDokumentacija/WackoSintaksis?v=xya

это типо.... незнаю как назвать.. ее там можно где-то загрузить? ну типа конвертирующий модуль (из этого языка на ХТМЛ)?? не успел вникнуть...

Автор: Mal Hack 11.9.2005, 16:34
Порядок - во вногом зависит от задач.
Последнее само собой mysql_real_escape_string.

Цитата(HappyMan @ 11.9.2005, 17:02)
rawurldecode
rawurlencode

Это зачем?

Цитата(HappyMan @ 11.9.2005, 17:02)
stripslashes
htmlspecialchars

ДОстаточно второй функции

Автор: HappyMan 11.9.2005, 17:14
Mal Hack
задачи сформулированы в пунктах 1)-4)

Автор: Mal Hack 11.9.2005, 17:19
Поясню...порядок в зависимости от того, как ты хочешь чтобы работала твоя сситема.
Короче пофиг. Но
1. Преобразование текста.
2. mysql

Автор: HappyMan 11.9.2005, 19:59
Mal Hack
одного не понимаю:
предположим пользователь ввел текст: <b>test</b>
в чат должно вывестись: <b>test</b> т.е тэги неактивны, это достигается вклучением htmlspecialchars

НО: если юзер ввел: [б]test[/б]
то мой чат должен преобразовать это в <b>test</b> и вывести этот текст уже жирным! т.е ф-цию htmlspecialchars уже использовать нельзя (если использовать то выведет <b>test</b>)

как же тогда быть? (чтоб при вводе <b>test</b> выводилось <b>test</b>, А при вводе [б]test[/б] выводилось TEST жирным шрифтом)

Автор: Mal Hack 11.9.2005, 20:13
1. htmlspecialchars.
2. preg_replace заменяешь все BBкоды.
3. регулярками заменяешь вхождения вида: &lt;b&rt; и т.п. Т.е. подставляешь уже строки..

Вообще я бы не давал возмоность использовать тэги в любом случае. Только ББ код.

Автор: HappyMan 11.9.2005, 21:26
Mal Hack
если чесно, то как-то не укладывается... можешь пример с БОЛДОМ привести?

Автор: Mal Hack 11.9.2005, 21:54
Делай все поочередно и анализируй вывод.

Автор: Рыжий 11.9.2005, 22:39
HappyMan
вот смотри вырузка тегов (то что хотел сказать Mal Hack):

Код

$a="<b>всем привет</b>";
echo "до вызова htmlspecialchars:".$a."<br />";
$a=htmlspecialchars($a);
echo "после вызова функции:".$a;


хотя так как сделал я - нерационально все лучше делать сразу:
Код

echo htmlspecialchars($a);


Автор: HappyMan 12.9.2005, 19:51
PHP-Script
Mal Hack

так?

$a="всем привет";
//$a="<b>всем привет</b>";
echo "до вызова htmlspecialchars:".$a."<br />";
$a=htmlspecialchars($a);
echo "после вызова функции:".$a."<br>";
$t = preg_replace('/\[b]/', '<b>', $a);
$x = preg_replace('/\[\/b]/', '</b>', $t);
echo $x;

Наверно можно оптимизировать..

Автор: Mal Hack 12.9.2005, 20:02
Цитата(HappyMan @ 12.9.2005, 20:51)
$t = preg_replace('/\[b]/', '<b>', $a);
$x = preg_replace('/\[\/b]/', '</b>', $t);

В одну функцию.

Автор: HappyMan 12.9.2005, 20:03
странно.. в чате пишет:
%3Cb%3Etest%3C%2Fb%3E
%5Bb%5Dtest%5B%2Fb%5D
Добавлено @ 20:04
а в мессто русских букв: %E2%E0%EF%E4%EB%EE%E2%E0%EF%E2%E0

Автор: -=Ustas=- 12.9.2005, 20:06
И еще желательно использовать вставки code для своего кода. А по функциям:
Код

$a = preg_replace("/ *\[b\](.*?)\[\/b\] */i", "<b>\\1</b>", $a);

по-моему, так будет гораздо лучше...

Автор: Mal Hack 12.9.2005, 20:32
s в модификаторы надо добавить только. Да и S было бы не лишним.

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