Цитата |
Заявки подали: qpayct zvezda_t Basili4 Lenarfate Krevedko DedMorozzz sergeiss |
Цитата (Basili4 @ 23.06.2010 - 17:00) |
Ну что что а приз симпатий zvezda_t полюбому заслужила. |
Цитата (twin @ 23.06.2010 - 22:58) |
Она между прочем за пояс этих трусов еще кой кого заткнуть сможет.... |
Цитата (sergeiss @ 23.06.2010 - 21:07) | ||
Фото - в студию!!! ![]() |
Цитата (twin @ 23.06.2010 - 18:58) |
Она между прочем за пояс этих трусов еще кой кого заткнуть сможет, так что осторожно. ![]() А вот если еще Ольга присоединится (на что я сильно надеюсь), то вообще туго придется. |
Цитата |
обсуждение ее одежды, да и в её отсутствие? |
Цитата (Krevedko @ 24.06.2010 - 07:17) |
вот я хотел очень книжку по ООП, ее нигде нет в электронном |
Цитата (sergeiss @ 23.06.2010 - 19:07) | ||
Фото - в студию!!! ![]() |
Цитата (zvezda_t @ 25.06.2010 - 14:24) |
ай я яй, sergeiss глубоко женатый мужчина, а всё туда же ![]() |
Цитата |
ну так танец на столе будет или это не тот форум?? |
Цитата |
ну так танец на столе будет или это не тот форум?? |
Цитата (zvezda_t @ 25.06.2010 - 17:27) |
оставьте свои эротические фантазии во снах! |
Цитата (DedMorozzz @ 26.06.2010 - 20:47) |
на форуме любят виртуальных девушек |
Цитата (Krevedko @ 26.06.2010 - 21:18) |
шо за Ольга и зачем она нам, суровым сибирским мужикам, нужна ? |
Цитата (DedMorozzz @ 26.06.2010 - 21:47) |
, что на форуме любят виртуальных девушек |
Цитата (sergeiss @ 26.06.2010 - 21:17) | ||
Я тебе скажу по секрету, что она - "суровая сибирская девушка". Так что ты поаккуратнее с ней ![]() ![]() |
Цитата (Krevedko @ 27.06.2010 - 15:10) |
Женщин-программистов не бывает. Вот не верю я и все тут smile.gif |
Цитата (Krevedko @ 27.06.2010 - 17:38) |
у меня комментов в коде иногда столько, что комментов бывает больше, чем самого кода |
Цитата (SergeyZuzic @ 27.06.2010 - 19:11) |
пока вышлю тебе посмотри, почему то не работает подсветка php. Функция вообще не хочет выполняться. |
Цитата (olgatcpip @ 27.06.2010 - 20:36) |
Может закроем тут тему мужчин и женщин? |
Цитата (SergeyZuzic @ 27.06.2010 - 17:11) |
Вот мой вариант Скачать Только вопрос twin так как пароль пока вышлю тебе посмотри, почему то не работает подсветка php. Функция вообще не хочет выполняться. ![]() |
Цитата |
Вот мой вариант Скачать |
Цитата (qpayct @ 27.06.2010 - 18:22) |
через 10 лет такие пароли будут ломать за 5 минут ![]() |
Цитата (olgatcpip @ 27.06.2010 - 19:59) |
А я функции называю так, чтобы по названию было понятно что она делает! |
Цитата (Krevedko @ 27.06.2010 - 20:29) |
ну тогда и оценим работу г-на SergeyZuzic |
Цитата (twin @ 27.06.2010 - 16:05) |
В этом анекдоте женщина права кстати с точки зрения программирования. Причем абсолютно. |
Цитата |
ответит мне на вопрос таким образом, то он идет лесом, причем сразу |
Цитата (twin @ 27.06.2010 - 22:14) | ||
Я бы ответил именно так. Потому что вводных условий нет никаких, вероятность расчитывать не начем. 1. Вероятность встретить динозавра на улице когда? В мезозойский период - более чем большая. 2. Динозавра какого? Игрушечного или маскарадный костюм к примеру - тоже весьма. 3. Встретить кому? Другому динозавру - почти 100% вероятность. Тут как раз и отличие логик. Мужик начнет вычислять, зачастую оперируя ошибочными вводными, набивая шишки. Женшина ответит не думая - и окажется права. |
Цитата |
В мезозойский период - более чем большая. |
Цитата |
Игрушечного или маскарадный костюм к примеру - тоже весьма |
Цитата |
Другому динозавру - почти 100% вероятность. |
Цитата |
отвечать именно так нельзя, потому что перед ответом надо уточнить все вышеописанные вопросы |
Цитата (olgatcpip @ 27.06.2010 - 23:32) |
Вот терпеть не могу когда уточняют не по делу... |
Цитата (olgatcpip @ 27.06.2010 - 23:32) |
А тебе хорошо?, а так? тьфу! делай дело и молчи! |
Цитата (waldicom @ 28.06.2010 - 01:36) |
Ольга, если Вам нравится, когда Вас прут без слов то бишь молча и с сопением, |
Цитата (Basili4 @ 28.06.2010 - 00:11) | ||
waldicom А вы приподчитаете конфуция цитировать? Уж лучше молчать и сопеть. |
//error_reporting(0);
function highlight_code($code) {
$code =stripslashes($code);
if(!strpos($code,"<?") && substr($code,0,2)!="<?") {
$code="<?php\n".trim($code)."\n?>";}
$code = trim($code); $code=highlight_string($code,true);
return $code;
}
Цитата |
Раз уж пошла демагогия, то начнем с того, что отвечать именно так нельзя, потому что перед ответом надо уточнить все вышеописанные вопросы. |
Цитата (olgatcpip @ 30.06.2010 - 08:58) |
И снова у меня есть, что сказать. Вот она мужская "логика" (хотя бы делила по другому, но раз мы не корректность называем мужской логикой..)! Задача. Сделать редактирование и что-то ещё. Смотрю в код. По этому безобразию понимаю. что все сделано! Почему же не работает!???? А так... просто разработчик не соизволил в htacceess дописать строчки.. правильно! Зачем???? Зачем доделывать до конца свою работу? А мне теперь ковыряйся и по коду восстанавливай мысли его. Ну что ж, не впервой! НЕ! ну явно не моя логика я все наоборот делаю! |
Цитата |
Это настолько странное заявляние, что даже комментировать его странно. |
Цитата |
мужская логика конечно круче женской. Но женская ей ни в чем не уступает. |
Цитата |
Между женским и мужским поведение огромная разница разница различия начинаются в понимании фундаментальный понятий. Но женщины более аккуратны, более ответственны, исполнительны. факт |
Цитата |
Не способны отделить главного от второстепенного эта их привычка делать одновременно все. |
Цитата |
Так же не способны организовать какой либо мало мальский процесс. |
Цитата |
Любое сопротивление и все она потекла |
Цитата |
Все надо контролировать потому что остановится Вы не можете |
Цитата |
Слишком критичны к тому как выглядит но не как работает. |
Цитата (olgatcpip @ 30.06.2010 - 12:30) |
Не совсем понимаю о чем ты. Вот я тут пишу - это поцесс? маломальский? |
Цитата (Krevedko @ 3.07.2010 - 14:05) |
а я как всегда...написал в первые дни какую-то хрень... дальше не притрагивался, времени нет. Чувствую ее и сдам |
Цитата (Basili4 @ 3.07.2010 - 10:08) | ||
Это типа оправдание. ????????? |
Цитата (DedMorozzz @ 9.07.2010 - 15:50) |
пхппрограмер - ты издеваешься?! 240 кб... |
Цитата |
Клиентская сторона не представляет интереса |
Цитата (twin @ 12.07.2010 - 16:20) |
Основное время вышло, пошло добавленное |
Цитата (glock18 @ 13.07.2010 - 07:15) |
их можно заархивировать еще раз в один ![]() |
Цитата (twin) |
Поторопимся... Основное время вышло, пошло добавленное. До конца недели всем здать. Не гоже тянуть, подводите своих товарищей. ![]() |
Цитата (DedMorozzz @ 24.06.2010 - 11:12) |
Во-во! Главное не победа на конкурсе, а победа на всех конкурсах... (: |
Цитата (qpayct @ 20.07.2010 - 14:55) |
а условие 2 недели это что не условие? |
Цитата (twin @ 20.07.2010 - 13:52) |
не волнуйся |
Цитата |
Тогда у меня предложение давайте до выходных до тянем а лучше до понедельника. А там кто сдал кто не сдал сами виноваты 4 недели на BB- декодер и это если клинскую часть не учитывают то можно даже и по 15 мин в день написать Есть кто против ?? |
Цитата (qpayct @ 20.07.2010 - 17:12) |
twin .... |
Цитата (sergeiss @ 20.07.2010 - 20:42) | ||
Если честно, то я тоже не понял. Так и вспоминается анекдот "папа, ты сейчас с кем разговаривал?" ![]() |
Цитата (Wird_34 @ 20.07.2010 - 18:27) |
Не помню такого анекдота не расскажешь? |
Цитата |
Едут в машине папа за рулем и трехлетний Вовочка сзади. Вовочка ест большое яблоко, потом спрашивает у папы: - Папа, а почему яблоко коричневое? Папа: - Понимаешь, когда ты откусываешь яблоко, у него выделяется сок. Так как в яблоке содержится железо, то взаимодействуя с кислородом, оно окисляется и, таким образом, приобретает коричневый цвет. После небольшой паузы Вовочка спрашивает: - Папа, а ты с кем сейчас разговаривал? |
Цитата |
В соискатели пройдут по три работы |
Цитата (twin @ 21.07.2010 - 13:51) |
некоторые не пошли сходу, к двум пароли не подходят |
Цитата |
к двум пароли не подходят. |
Цитата (Basili4 @ 22.07.2010 - 09:14) |
Ну и соответственно в своем коде косяки высмотрел и прям не мало. |
Цитата |
Но как сказал - у работы уровень приоритета выше(тут вы должны быть удивлены). |
Цитата |
Krevedko >> лучше бы один сначала проверл, второй с конца..интрига бы была до самого конца |
Цитата (Krevedko @ 26.07.2010 - 15:33) |
я например перечеркнутый тег не делал..только подчеркнутый кажется. ты мне за это снимешь ? |
Цитата |
- через чур просто, понятно, подключить просто, но нет смысла т.к. не работает. |
Цитата (Krevedko @ 26.07.2010 - 16:21) |
1. Корректность. ----- Работает вообще не коректно. Итого: 0. 2. Оригинальность - не оригинально Итого: 0. 3. Безопасность. - Скрипт абсолютно не безопасен, пропускает html. Итого: 0. ахаха..красава ))))))))))) |
Цитата (Basili4 @ 26.07.2010 - 16:27) |
Хороший код. Легко подключаемый легко отключаемый. |
Цитата (inpost @ 26.07.2010 - 16:37) |
Joker А ты молодец, быстро всех проверяешь =) Жаль, что люди слишком лениво подключились к этому конкурсу! |
Цитата (Krevedko @ 26.07.2010 - 16:37) |
да шучу я. Ольгина та злая работа огромная..с ооп..которую Никита боится даже проверять. |
Цитата (DedMorozzz @ 26.07.2010 - 15:49) |
это работа и за ЭТО платят сотни нефти, |
Цитата |
лень было жава-скрипты прикручивать )))))) оценивается ведь только серверная часть |
Цитата (twin @ 23.07.2010 - 22:59) |
1. Вот открой свой код в обычном блокноте. И получится такой же разброд, как и видно тут, на форуме. Табуляторы по разному везде интерпретируются. Не нужно использовать их в коде, только пробелы. |
Цитата (inpost @ 26.07.2010 - 17:07) |
в №8 отсутствует перенос длинных слов, пропустили. |
Цитата (inpost @ 26.07.2010 - 12:07) |
в №8 отсутствует перенос длинных слов, пропустили. Так скажите, итак понятно, лучшая работа - №11, для меня =))) Почему там WordWrap работает с ЮТФ??? Это из-за того, что CUT = 1 ??? |
Цитата (Basili4 @ 26.07.2010 - 17:21) |
они в свою очередь быстро проверят код и вынесут вердикт. |
Цитата |
да шучу я. Ольгина та злая работа огромная..с ооп..которую Никита боится даже проверять |
Цитата |
я его и не проверял) я не считаю нужным вордврап делать внутри бб-кодера. |
Цитата |
Skype: MedvedevNikitaAleksandrovich Mail: MrNikita[гав-гав]yandex[toчkа]ru |
<?php
class bbcode {
/* Описания свойств и методов смотрите в документации. */
var $tag = '';
var $attrib = array();
var $text = '';
var $syntax = array();
var $tree = array();
var $tags = array(
'*' => 'bb_li',
'a' => 'bb_a',
'abbr' => 'bb_abbr',
'acronym' => 'bb_acronym',
'address' => 'bb_address',
'align' => 'bb_align',
'anchor' => 'bb_a',
'b' => 'bb_strong',
'bbcode' => 'bb_bbcode',
'caption' => 'bb_caption',
'center' => 'bb_align',
'code' => 'bb_code',
'color' => 'bb_color',
'email' => 'bb_email',
'font' => 'bb_font',
'google' => 'bb_google',
'h1' => 'bb_h1',
'h2' => 'bb_h2',
'h3' => 'bb_h3',
'hr' => 'bb_hr',
'i' => 'bb_i',
'img' => 'bb_img',
'justify' => 'bb_align',
'left' => 'bb_align',
'list' => 'bb_list',
'nobb' => 'bb_nobb',
'php' => 'bb_php',
'quote' => 'bb_quote',
'right' => 'bb_align',
's' => 'bb_del',
'size' => 'bb_size',
'strike' => 'bb_del',
'sub' => 'bb_sub',
'sup' => 'bb_sup',
'table' => 'bb_table',
'td' => 'bb_td',
'th' => 'bb_th',
'tr' => 'bb_tr',
'tt' => 'bb_tt',
'u' => 'bb_u',
'url' => 'bb_a'
);
var $children = array(
'a','abbr','acronym','address','align','anchor','b','bbcode','center',
'code','color','email','font','google','h1','h2','h3','hr','i','img',
'justify','left','list','nobb','php','quote','right','s','size',
'strike','sub','sup','table','tt','u','url'
);
var $mnemonics = array();
var $autolinks = true;
var $is_close = false;
var $lbr = 0;
var $rbr = 0;
function bbcode($code = '') {
if (is_array($code)) {
$is_tree = false;
foreach ($code as $key => $val) {
if (isset($val['val'])) {
$this -> tree = $code;
$this -> syntax = $this -> get_syntax();
$is_tree = true;
break;
}
}
if (! $is_tree) {
$this -> syntax = $code;
$this -> get_tree();
}
$this -> text = '';
foreach ($this -> syntax as $val) {
$this -> text .= $val['str'];
}
} elseif ($code) {
$this -> text = $code;
$this -> parse();
}
}
function get_tokens() {
$length = strlen($this -> text);
$tokens = array();
$token_key = -1;
$type_of_char = null;
for ($i=0; $i < $length; ++$i) {
$previous_type = $type_of_char;
switch ($this -> text{$i}) {
case '[':
$type_of_char = 0;
break;
case ']':
$type_of_char = 1;
break;
case '"':
$type_of_char = 2;
break;
case "'":
$type_of_char = 3;
break;
case "=":
$type_of_char = 4;
break;
case '/':
$type_of_char = 5;
break;
case ' ':
$type_of_char = 6;
break;
case "\t":
$type_of_char = 6;
break;
case "\n":
$type_of_char = 6;
break;
case "\r":
$type_of_char = 6;
break;
case "\0":
$type_of_char = 6;
break;
case "\x0B":
$type_of_char = 6;
break;
default:
$type_of_char = 7;
}
if (7 == $previous_type && $type_of_char != $previous_type) {
$word = strtolower($tokens[$token_key][1]);
if (isset($this -> tags[$word])) {
$tokens[$token_key][0] = 8;
}
}
switch ($type_of_char) {
case 6:
if (6 == $previous_type) {
$tokens[$token_key][1] .= $this -> text{$i};
} else {
$tokens[++$token_key] = array(6, $this -> text{$i});
}
break;
case 7:
if (7 == $previous_type) {
$tokens[$token_key][1] .= $this -> text{$i};
} else {
$tokens[++$token_key] = array(7, $this -> text{$i});
}
break;
default:
$tokens[++$token_key] = array(
$type_of_char, $this -> text{$i}
);
}
}
return $tokens;
}
function parse($code = '') {
if ($code) {
$this -> bbcode($code);
return;
}
/*
Используем метод конечных автоматов
Список возможных состояний автомата:
0 - Начало сканирования или находимся вне тега. Ожидаем что угодно.
1 - Встретили символ "[", который считаем началом тега. Ожидаем имя
тега, или символ "/".
2 - Нашли в теге неожидавшийся символ "[". Считаем предыдущую строку
ошибкой. Ожидаем имя тега, или символ "/".
3 - Нашли в теге синтаксическую ошибку. Текущий символ не является "[".
Ожидаем что угодно.
4 - Сразу после "[" нашли символ "/". Предполагаем, что попали в
закрывающий тег. Ожидаем имя тега или символ "]".
5 - Сразу после "[" нашли имя тега. Считаем, что находимся в
открывающем теге. Ожидаем пробел или "=" или "/" или "]".
6 - Нашли завершение тега "]". Ожидаем что угодно.
7 - Сразу после "[/" нашли имя тега. Ожидаем "]".
8 - В открывающем теге нашли "=". Ожидаем пробел или значение атрибута.
9 - В открывающем теге нашли "/", означающий закрытие тега. Ожидаем
"]".
10 - В открывающем теге нашли пробел после имени тега или имени
атрибута. Ожидаем "=" или имя другого атрибута или "/" или "]".
11 - Нашли '"' начинающую значение атрибута, ограниченное кавычками.
Ожидаем что угодно.
12 - Нашли "'" начинающий значение атрибута, ограниченное апострофами.
Ожидаем что угодно.
13 - Нашли начало незакавыченного значения атрибута. Ожидаем что угодно.
14 - В открывающем теге после "=" нашли пробел. Ожидаем значение
атрибута.
15 - Нашли имя атрибута. Ожидаем пробел или "=" или "/" или "]".
16 - Находимся внутри значения атрибута, ограниченного кавычками.
Ожидаем что угодно.
17 - Завершение значения атрибута. Ожидаем пробел или имя следующего
атрибута или "/" или "]".
18 - Находимся внутри значения атрибута, ограниченного апострофами.
Ожидаем что угодно.
19 - Находимся внутри незакавыченного значения атрибута. Ожидаем что
угодно.
20 - Нашли пробел после значения атрибута. Ожидаем имя следующего
атрибута или "/" или "]".
Описание конечного автомата:
*/
$finite_automaton = array(
// Предыдущие | Состояния для текущих событий (лексем) |
// состояния | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
0 => array( 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 )
, 1 => array( 2 , 3 , 3 , 3 , 3 , 4 , 3 , 3 , 5 )
, 2 => array( 2 , 3 , 3 , 3 , 3 , 4 , 3 , 3 , 5 )
, 3 => array( 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 )
, 4 => array( 2 , 6 , 3 , 3 , 3 , 3 , 3 , 3 , 7 )
, 5 => array( 2 , 6 , 3 , 3 , 8 , 9 , 10 , 3 , 3 )
, 6 => array( 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 )
, 7 => array( 2 , 6 , 3 , 3 , 3 , 3 , 3 , 3 , 3 )
, 8 => array( 13 , 13 , 11 , 12 , 13 , 13 , 14 , 13 , 13 )
, 9 => array( 2 , 6 , 3 , 3 , 3 , 3 , 3 , 3 , 3 )
, 10 => array( 2 , 6 , 3 , 3 , 8 , 9 , 3 , 15 , 15 )
, 11 => array( 16 , 16 , 17 , 16 , 16 , 16 , 16 , 16 , 16 )
, 12 => array( 18 , 18 , 18 , 17 , 18 , 18 , 18 , 18 , 18 )
, 13 => array( 19 , 6 , 19 , 19 , 19 , 19 , 17 , 19 , 19 )
, 14 => array( 2 , 3 , 11 , 12 , 13 , 13 , 3 , 13 , 13 )
, 15 => array( 2 , 6 , 3 , 3 , 8 , 9 , 10 , 3 , 3 )
, 16 => array( 16 , 16 , 17 , 16 , 16 , 16 , 16 , 16 , 16 )
, 17 => array( 2 , 6 , 3 , 3 , 3 , 9 , 20 , 15 , 15 )
, 18 => array( 18 , 18 , 18 , 17 , 18 , 18 , 18 , 18 , 18 )
, 19 => array( 19 , 6 , 19 , 19 , 19 , 19 , 20 , 19 , 19 )
, 20 => array( 2 , 6 , 3 , 3 , 3 , 9 , 3 , 15 , 15 )
);
// Закончили описание конечного автомата
$mode = 0;
$result = array();
$tag_decomposition = array();
$token_key = -1;
$value = '';
// Сканируем массив лексем с помощью построенного автомата:
foreach ($this -> get_tokens() as $token) {
$previous_mode = $mode;
$mode = $finite_automaton[$previous_mode][$token[0]];
switch ($mode) {
case 0:
if (-1 < $token_key && 'text'==$result[$token_key]['type']) {
$result[$token_key]['str'] .= $token[1];
} else {
$result[++$token_key] = array(
'type' => 'text',
'str' => $token[1]
);
}
break;
case 1:
$tag_decomposition['name'] = '';
$tag_decomposition['type'] = '';
$tag_decomposition['str'] = '[';
$tag_decomposition['layout'][] = array( 0, '[' );
break;
case 2:
if (-1<$token_key && 'text'==$result[$token_key]['type']) {
$result[$token_key]['str'] .= $tag_decomposition['str'];
} else {
$result[++$token_key] = array(
'type' => 'text',
'str' => $tag_decomposition['str']
);
}
$tag_decomposition = array();
$tag_decomposition['name'] = '';
$tag_decomposition['type'] = '';
$tag_decomposition['str'] = '[';
$tag_decomposition['layout'][] = array( 0, '[' );
break;
case 3:
if (-1<$token_key && 'text'==$result[$token_key]['type']) {
$result[$token_key]['str'] .= $tag_decomposition['str'];
$result[$token_key]['str'] .= $token[1];
} else {
$result[++$token_key] = array(
'type' => 'text',
'str' => $tag_decomposition['str'].$token[1]
);
}
$tag_decomposition = array();
break;
case 4:
$tag_decomposition['type'] = 'close';
$tag_decomposition['str'] .= '/';
$tag_decomposition['layout'][] = array( 1, '/' );
break;
case 5:
$tag_decomposition['type'] = 'open';
$name = strtolower($token[1]);
$tag_decomposition['name'] = $name;
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 2, $token[1] );
$tag_decomposition['attrib'][$name] = '';
break;
case 6:
if (! isset($tag_decomposition['name'])) {
$tag_decomposition['name'] = '';
}
if (13 == $previous_mode || 19 == $previous_mode) {
$tag_decomposition['layout'][] = array( 7, $value );
}
$tag_decomposition['str'] .= ']';
$tag_decomposition['layout'][] = array( 0, ']' );
$result[++$token_key] = $tag_decomposition;
$tag_decomposition = array();
break;
case 7:
$tag_decomposition['name'] = strtolower($token[1]);
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 2, $token[1] );
break;
case 8:
$tag_decomposition['str'] .= '=';
$tag_decomposition['layout'][] = array( 3, '=' );
break;
case 9:
$tag_decomposition['type'] = 'open/close';
$tag_decomposition['str'] .= '/';
$tag_decomposition['layout'][] = array( 1, '/' );
break;
case 10:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 4, $token[1] );
break;
case 11:
$tag_decomposition['str'] .= '"';
$tag_decomposition['layout'][] = array( 5, '"' );
$value = '';
break;
case 12:
$tag_decomposition['str'] .= "'";
$tag_decomposition['layout'][] = array( 5, "'" );
$value = '';
break;
case 13:
$tag_decomposition['attrib'][$name] = $token[1];
$value = $token[1];
$tag_decomposition['str'] .= $token[1];
break;
case 14:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 4, $token[1] );
break;
case 15:
$name = strtolower($token[1]);
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 6, $token[1] );
$tag_decomposition['attrib'][$name] = '';
break;
case 16:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['attrib'][$name] .= $token[1];
$value .= $token[1];
break;
case 17:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['layout'][] = array( 7, $value );
$value = '';
$tag_decomposition['layout'][] = array( 5, $token[1] );
break;
case 18:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['attrib'][$name] .= $token[1];
$value .= $token[1];
break;
case 19:
$tag_decomposition['str'] .= $token[1];
$tag_decomposition['attrib'][$name] .= $token[1];
$value .= $token[1];
break;
case 20:
$tag_decomposition['str'] .= $token[1];
if ( 13 == $previous_mode || 19 == $previous_mode ) {
$tag_decomposition['layout'][] = array( 7, $value );
}
$value = '';
$tag_decomposition['layout'][] = array( 4, $token[1] );
break;
}
}
if (count($tag_decomposition)) {
if ( -1 < $token_key && 'text' == $result[$token_key]['type'] ) {
$result[$token_key]['str'] .= $tag_decomposition['str'];
} else {
$result[++$token_key] = array(
'type' => 'text',
'str' => $tag_decomposition['str']
);
}
}
$this -> syntax = $result;
$this -> get_tree();
return $result;
}
function specialchars($string) {
$chars = array(
'[' => '@l;',
']' => '@r;',
'"' => '@q;',
"'" => '@a;',
'@' => '@at;'
);
return strtr($string, $chars);
}
function unspecialchars($string) {
$chars = array(
'@l;' => '[',
'@r;' => ']',
'@q;' => '"',
'@a;' => "'",
'@at;' => '@'
);
return strtr($string, $chars);
}
function must_close_tag($current, $next) {
$class_vars = get_class_vars($this -> tags[$current]);
$must_close = in_array($next, $class_vars['ends']);
$class_vars = get_class_vars($this -> tags[$next]);
if (! $must_close && isset($class_vars['stop'])) {
$must_close = in_array($current, $class_vars['stop']);
}
return $must_close;
}
function normalize_bracket($syntax) {
$structure = array();
$structure_key = -1;
$level = 0;
$open_tags = array();
foreach ($syntax as $syntax_key => $val) {
unset($val['layout']);
switch ($val['type']) {
case 'text':
$val['str'] = $this -> unspecialchars($val['str']);
$type = (-1 < $structure_key)
? $structure[$structure_key]['type'] : false;
if ('text' == $type) {
$structure[$structure_key]['str'] .= $val['str'];
} else {
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = $level;
}
break;
case 'open/close':
$val['attrib'] = array_map(
array(&$this, 'unspecialchars'), $val['attrib']
);
foreach (array_reverse($open_tags,true) as $ult_key => $ultimate) {
if ($this -> must_close_tag($ultimate, $val['name'])) {
$structure[++$structure_key] = array(
'type' => 'close',
'name' => $ultimate,
'str' => '',
'level' => --$level
);
unset($open_tags[$ult_key]);
} else {
break;
}
}
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = $level;
break;
case 'open':
$val['attrib'] = array_map(
array(&$this, 'unspecialchars'), $val['attrib']
);
foreach (array_reverse($open_tags,true) as $ult_key => $ultimate) {
if ($this -> must_close_tag($ultimate, $val['name'])) {
$structure[++$structure_key] = array(
'type' => 'close',
'name' => $ultimate,
'str' => '',
'level' => --$level
);
unset($open_tags[$ult_key]);
} else { break; }
}
$class_vars = get_class_vars($this -> tags[$val['name']]);
if ($class_vars['is_close']) {
$val['type'] = 'open/close';
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = $level;
} else {
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = $level++;
$open_tags[] = $val['name'];
}
break;
case 'close':
if (! count($open_tags)) {
$type = (-1 < $structure_key)
? $structure[$structure_key]['type'] : false;
if ( 'text' == $type ) {
$structure[$structure_key]['str'] .= $val['str'];
} else {
$structure[++$structure_key] = array(
'type' => 'text',
'str' => $val['str'],
'level' => 0
);
}
break;
}
if (! $val['name']) {
end($open_tags);
list($ult_key, $ultimate) = each($open_tags);
$val['name'] = $ultimate;
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = --$level;
unset($open_tags[$ult_key]);
break;
}
if (! in_array($val['name'],$open_tags)) {
$type = (-1 < $structure_key)
? $structure[$structure_key]['type'] : false;
if ('text' == $type) {
$structure[$structure_key]['str'] .= $val['str'];
} else {
$structure[++$structure_key] = array(
'type' => 'text',
'str' => $val['str'],
'level' => $level
);
}
break;
}
foreach (array_reverse($open_tags,true) as $ult_key => $ultimate) {
if ($ultimate != $val['name']) {
$structure[++$structure_key] = array(
'type' => 'close',
'name' => $ultimate,
'str' => '',
'level' => --$level
);
unset($open_tags[$ult_key]);
} else {
break;
}
}
$structure[++$structure_key] = $val;
$structure[$structure_key]['level'] = --$level;
unset($open_tags[$ult_key]);
}
}
foreach (array_reverse($open_tags,true) as $ult_key => $ultimate) {
$structure[++$structure_key] = array(
'type' => 'close',
'name' => $ultimate,
'str' => '',
'level' => --$level
);
unset($open_tags[$ult_key]);
}
return $structure;
}
function get_tree() {
/* Превращаем $this -> syntax в правильную скобочную структуру */
$structure = $this -> normalize_bracket($this -> syntax);
/* Отслеживаем, имеют ли элементы неразрешенные подэлементы.
Соответственно этому исправляем $structure. */
$normalized = array();
$normal_key = -1;
$level = 0;
$open_tags = array();
$not_tags = array();
foreach ($structure as $structure_key => $val) {
switch ($val['type']) {
case 'text':
$type = (-1 < $normal_key)
? $normalized[$normal_key]['type'] : false;
if ('text' == $type) {
$normalized[$normal_key]['str'] .= $val['str'];
} else {
$normalized[++$normal_key] = $val;
$normalized[$normal_key]['level'] = $level;
}
break;
case 'open/close':
$is_open = count($open_tags);
end($open_tags);
$info = get_class_vars($this -> tags[$val['name']]);
if ($is_open) {
$class_vars = get_class_vars(
$this -> tags[current($open_tags)]
);
$children = $class_vars['children'];
} else {
$children = array();
}
if (isset($info['top_level'])) {
$top_level = $info['top_level'];
} else {
$top_level = in_array($val['name'], $this -> children);
}
$is_child = in_array($val['name'], $children);
if (isset($info['parent']) && ! $is_child) {
if (in_array(current($open_tags), $info['parent'])) {
$is_child = true;
}
}
if (! $level && ! $top_level || $is_open && ! $is_child) {
$type = (-1 < $normal_key)
? $normalized[$normal_key]['type'] : false;
if ( 'text' == $type ) {
$normalized[$normal_key]['str'] .= $val['str'];
} else {
$normalized[++$normal_key] = array(
'type' => 'text',
'str' => $val['str'],
'level' => $level
);
}
break;
}
$normalized[++$normal_key] = $val;
$normalized[$normal_key]['level'] = $level;
break;
case 'open':
$is_open = count($open_tags);
end($open_tags);
$info = get_class_vars($this -> tags[$val['name']]);
if ($is_open) {
$class_vars = get_class_vars(
$this -> tags[current($open_tags)]
);
$children = $class_vars['children'];
} else {
$children = array();
}
if (isset($info['top_level'])) {
$top_level = $info['top_level'];
} else {
$top_level = in_array($val['name'], $this -> children);
}
$is_child = in_array($val['name'], $children);
if (isset($info['parent']) && ! $is_child) {
if (in_array(current($open_tags), $info['parent'])) {
$is_child = true;
}
}
if (! $level && ! $top_level || $is_open && ! $is_child) {
$not_tags[$val['level']] = $val['name'];
$type = (-1 < $normal_key)
? $normalized[$normal_key]['type'] : false;
if ( 'text' == $type ) {
$normalized[$normal_key]['str'] .= $val['str'];
} else {
$normalized[++$normal_key] = array(
'type' => 'text',
'str' => $val['str'],
'level' => $level
);
}
break;
}
$normalized[++$normal_key] = $val;
$normalized[$normal_key]['level'] = $level++;
$ult_key = count($open_tags);
$open_tags[$ult_key] = $val['name'];
break;
case 'close':
$not_normal = isset($not_tags[$val['level']])
&& $not_tags[$val['level']] = $val['name'];
if ( $not_normal ) {
unset($not_tags[$val['level']]);
$type = (-1 < $normal_key)
? $normalized[$normal_key]['type'] : false;
if ( 'text' == $type ) {
$normalized[$normal_key]['str'] .= $val['str'];
} else {
$normalized[++$normal_key] = array(
'type' => 'text',
'str' => $val['str'],
'level' => $level
);
}
break;
}
$normalized[++$normal_key] = $val;
$normalized[$normal_key]['level'] = --$level;
$ult_key = count($open_tags) - 1;
unset($open_tags[$ult_key]);
break;
}
}
unset($structure);
// Формируем дерево элементов
$result = array();
$result_key = -1;
$open_tags = array();
$val_key = -1;
foreach ($normalized as $normal_key => $val) {
switch ($val['type']) {
case 'text':
if (! $val['level']) {
$result[++$result_key] = array(
'type' => 'text',
'str' => $val['str']
);
break;
}
$open_tags[$val['level']-1]['val'][] = array(
'type' => 'text',
'str' => $val['str']
);
break;
case 'open/close':
if (! $val['level']) {
$result[++$result_key] = array(
'type' => 'item',
'name' => $val['name'],
'attrib' => $val['attrib'],
'val' => array()
);
break;
}
$open_tags[$val['level']-1]['val'][] = array(
'type' => 'item',
'name' => $val['name'],
'attrib' => $val['attrib'],
'val' => array()
);
break;
case 'open':
$open_tags[$val['level']] = array(
'type' => 'item',
'name' => $val['name'],
'attrib' => $val['attrib'],
'val' => array()
);
break;
case 'close':
if ( ! $val['level'] ) {
$result[++$result_key] = $open_tags[0];
unset($open_tags[0]);
break;
}
$open_tags[$val['level']-1]['val'][] = $open_tags[$val['level']];
unset($open_tags[$val['level']]);
break;
}
}
$this -> tree = $result;
return $result;
}
function get_syntax($tree = false) {
if (! is_array($tree)) {
$tree = $this -> tree;
}
$syntax = array();
foreach ($tree as $elem) {
if ('text' == $elem['type']) {
$syntax[] = array(
'type' => 'text',
'str' => $this -> specialchars($elem['str'])
);
} else {
$sub_elems = $this -> get_syntax($elem['val']);
$str = '';
$layout = array(array(0, '['));
foreach ($elem['attrib'] as $name => $val) {
$val = $this -> specialchars($val);
if ($str) {
$str .= ' ';
$layout[] = array(4, ' ');
$layout[] = array(6, $name);
} else {
$layout[] = array(2, $name);
}
$str .= $name;
if ($val) {
$str .= '="'.$val.'"';
$layout[] = array(3, '=');
$layout[] = array(5, '"');
$layout[] = array(7, $val);
$layout[] = array(5, '"');
}
}
if (count($sub_elems)) {
$str = '['.$str.']';
} else {
$str = '['.$str.' /]';
$layout[] = array(4, ' ');
$layout[] = array(1, '/');
}
$layout[] = array(0, ']');
$syntax[] = array(
'type' => count($sub_elems) ? 'open' : 'open/close',
'str' => $str,
'name' => $elem['name'],
'attrib' => $elem['attrib'],
'layout' => $layout
);
foreach ($sub_elems as $sub_elem) { $syntax[] = $sub_elem; }
if (count($sub_elems)) {
$syntax[] = array(
'type' => 'close',
'str' => '[/'.$elem['name'].']',
'name' => $elem['name'],
'layout' => array(
array(0, '['),
array(1, '/'),
array(2, $elem['name']),
array(0, ']')
)
);
}
}
}
return $syntax;
}
function insert_smiles($text) {
$text = nl2br(htmlspecialchars($text,ENT_NOQUOTES));
$text = str_replace(' ', ' ', $text);
if ($this -> autolinks) {
$uri = "[\w\d-]+\.[\w\d-]+[^\s<\"\']*[^.,;\s<\"\'\)]+";
$search = array(
"'(.)((http|https|ftp)://".$uri.")'si",
"'([^/])(www\.".$uri.")'si",
"'([^\w\d-\.])([\w\d-\.]+@[\w\d-\.]+\.[\w]+[^.,;\s<\"\'\)]+)'si"
);
$replace = array(
'$1<a href="$2" target="_blank">$2</a>',
'$1<a href="http://$2" target="_blank">$2</a>',
'$1<a href="mailto:$2">$2</a>'
);
$text = preg_replace($search, $replace, $text);
}
foreach ($this -> mnemonics as $mnemonic => $value) {
$text = str_replace($mnemonic, $value, $text);
}
return $text;
}
function highlight() {
$chars = array(
'@l;' => '<span class="bb_spec_char">@l;</span>',
'@r;' => '<span class="bb_spec_char">@r;</span>',
'@q;' => '<span class="bb_spec_char">@q;</span>',
'@a;' => '<span class="bb_spec_char">@a;</span>',
'@at;' => '<span class="bb_spec_char">@at;</span>'
);
$uri = "[\w\d-]+\.[\w\d-]+[^\s<\"\']*[^.,;\s<\"\'\)]+";
$search = array(
"'(.)((http|https|ftp)://".$uri.")'si",
"'([^/])(www\.".$uri.")'si",
"'([^\w\d-\.])([\w\d-\.]+@[\w\d-\.]+\.[\w]+[^.,;\s<\"\'\)]+)'si"
);
$replace = array(
'$1<span class="bb_autolink">$2</span>',
'$1<span class="bb_autolink">$2</span>',
'$1<span class="bb_autolink">$2</span>'
);
$str = '';
foreach($this -> syntax as $elem) {
if ('text' == $elem['type']) {
$elem['str'] = strtr(htmlspecialchars($elem['str']), $chars);
foreach ($this -> mnemonics as $mnemonic => $value) {
$elem['str'] = str_replace(
$mnemonic,
'<span class="bb_mnemonic">'.$mnemonic.'</span>',
$elem['str']
);
}
$elem['str'] = preg_replace($search, $replace, $elem['str']);
$str .= $elem['str'];
} else {
$str .= '<span class="bb_tag">';
foreach ($elem['layout'] as $val) {
switch ($val[0]) {
case 0:
$str .= '<span class="bb_bracket">'.$val[1]
.'</span>';
break;
case 1:
$str .= '<span class="bb_slash">/</span>';
break;
case 2:
$str .= '<span class="bb_tagname">'.$val[1]
.'</span>';
break;
case 3:
$str .= '<span class="bb_equal">=</span>';
break;
case 4:
$str .= $val[1];
break;
case 5:
if (! trim($val[1])) {
$str .= $val[1];
} else {
$str .= '<span class="bb_quote">'.$val[1]
.'</span>';
}
break;
case 6:
$str .= '<span class="bb_attrib_name">'
.htmlspecialchars($val[1]).'</span>';
break;
case 7:
if (! trim($val[1])) {
$str .= $val[1];
} else {
$str .= '<span class="bb_attrib_val">'
.strtr(htmlspecialchars($val[1]), $chars)
.'</span>';
}
break;
default:
$str .= $val[1];
}
}
$str .= '</span>';
}
}
$str = nl2br($str);
$str = str_replace(' ', ' ', $str);
return '<code class="bb_code">'.$str.'</code>';
}
function get_html($elems = false) {
if (! is_array($elems)) {
$elems = $this -> tree;
}
$result = '';
$lbr = 0;
$rbr = 0;
foreach ($elems as $elem) {
if ('text' == $elem['type']) {
$elem['str'] = $this -> insert_smiles($elem['str']);
for ($i=0; $i < $rbr; ++$i) {
$elem['str'] = ltrim($elem['str']);
if ('<br />' == substr($elem['str'], 0, 6)) {
$elem['str'] = substr_replace($elem['str'], '', 0, 6);
}
}
$result .= $elem['str'];
} else {
$class_vars = get_class_vars($this -> tags[$elem['name']]);
$lbr = $class_vars['lbr'];
$rbr = $class_vars['rbr'];
for ($i=0; $i < $lbr; ++$i) {
$result = rtrim($result);
if ('<br />' == substr($result, -6)) {
$result = substr_replace($result, '', -6, 6);
}
}
$handler = $this -> tags[$elem['name']];
if (class_exists($handler)) {
$tag = new $handler;
$tag -> tag = $elem['name'];
$tag -> attrib = $elem['attrib'];
$tag -> tags = $this -> tags;
$tag -> mnemonics = $this -> mnemonics;
$tag -> autolinks = $this -> autolinks;
$tag -> tree = $elem['val'];
$result .= $tag -> get_html();
} else {
$result .= bbcode::get_html($elem['val']);
}
}
}
return $result;
}
}
// Класс для тегов [a], [anchor] и [url]
class bb_a extends bbcode {
var $ends = array(
'*','align','center','h1','h2','h3','hr','justify','left','list','php',
'quote','right','table','td','th','tr'
);
var $children = array(
'abbr','acronym','b','bbcode','code','color','font','i','img','nobb',
's','size','strike','sub','sup','tt','u'
);
function get_html() {
$text = '';
foreach ($this -> tree as $val) {
if ('text' == $val['type']) { $text .= $val['str']; }
}
$href = '';
if (isset($this -> attrib['url'])) {
$href = $this -> attrib['url'];
}
if (! $href && isset($this -> attrib['a'])) {
$href = $this -> attrib['a'];
}
if (! $href && isset($this -> attrib['href'])) {
$href = $this -> attrib['href'];
}
if (! $href && ! isset($this -> attrib['anchor'])) { $href = $text; }
$protocols = array(
'http://', 'https://', 'ftp://', 'file://', 'mailto:',
'#', '/', '?', './', '../'
);
$is_http = false;
foreach ($protocols as $val) {
if ($val == substr($href, 0, strlen($val))) {
$is_http = true;
break;
}
}
if ($href && ! $is_http) { $href = 'http://'.$href; }
$attr = 'class="bb"';
if ($href) {
$attr .= ' href="'.htmlspecialchars($href).'"';
}
if (isset($this -> attrib['title'])) {
$title = $this -> attrib['title'];
$attr .= ' title="'.htmlspecialchars($title).'"';
}
$id = '';
if (isset($this -> attrib['name'])) {
$id = $this -> attrib['name'];
}
if (isset($this -> attrib['id'])) {
$id = $this -> attrib['id'];
}
if (isset($this -> attrib['anchor'])) {
$id = $this -> attrib['anchor'];
if (! $id) { $id = $text; }
}
if ($id) {
if ($id{0} < 'A' || $id{0} > 'z') { $id = 'bb'.$id; }
$attr .= ' id="'.htmlspecialchars($id).'"';
}
if (isset($this -> attrib['target'])) {
$target = $this -> attrib['target'];
$attr .= ' target="'.htmlspecialchars($target).'"';
}
return '<a '.$attr.'>'.parent::get_html($this -> tree).'</a>';
}
}
Цитата |
Ну и долгожданная счастливая работа № 13 smile.gif Все уже догадались чья |
Цитата |
Кароче этого автора все равно сняли за говнокодинг - пусть признается кто он. |
Цитата |
вот ББ -декодеру нужен тег Nobb код Деда мороза из сковеркан я к статит реализовал защиту от этого но это не было оценено эх |
Цитата |
Да гуест вылазь а то я знаю одного таварища он тебя по ip пробьет и устроит цикл по двум слоям |
Цитата (twin @ 29.07.2010 - 13:45) |
А кто знает, glock18 на долго в отпуск? |
Цитата |
А водки сколько у костра... Ведро раков и хариус, запеченный в углях. Тишина, покой. |
Цитата |
И причём тут рыбалка? ))) |
Цитата (twin @ 29.07.2010 - 14:40) |
И главное - никакого компа!!! |
Цитата |
- непонятно зачем припаханная сессия |
Цитата (Guest @ 5.08.2010 - 09:19) |
а в этой задаче ненужно учитывать перенаправление на другую страницу? как тогда избежать вопроса - "отправить данные повторно"? |
Цитата |
Зачем ты метки хранишь? Если можно работать только с $_POST. |
if(mysql_query())
$_SESSION['save']=1;
else
$_SESSION['save']=2;
$url="?Itemid=$page1";
_redirect($url);
exit;
if(isset($_SESSION['save']))
{
if($_SESSION['save']==1)
$Message= "Всё ок";
elseif($_SESSION['save']==2)
$Message= "Всё ок";
//обнуляем переменную
$_SESSION['save']=NULL;
}
if(mysql_query())
$_POST['save']=1;
else
$_POST['save']=2;
$url="?Itemid=$page1";
_redirect($url);
exit;
if(isset($_POST['save']))
{
if($_POST['save']==1)
$Message= "Всё ок";
elseif($_POST['save']==2)
$Message= "Всё ок";
//обнуляем переменную
$_POST['save']=NULL;
}
elseif(...['save']==2)
$Message="Ой ошибка"
Цитата |
ну не будет там сессии, и все. |
<?php
error_reporting(E_ALL);
include ('config.php');
include ('functions/functions.php');
ob_start();
if(isset($_POST['submit'])) {
//Проверяем поле 1
if(strlen($_POST['проверяемое_поле_1']) < значение) {
$errors[] = 'Текстовая область 1 не заполнена.';
}
//Проверяем поле 2
elseif(strlen($_POST['проверяемое_поле_2']) < значение) {
$errors[] = 'Текстовая область 2 не заполнена.';
}
//Если ошибок нет
if(count($errors) == 0) {
//Вызываем BB парсер
$my_input[1] = nl2br(bb_tags(htmlspecialchars($_POST['проверяемое_поле_1'])));
$my_input[2] = nl2br(bb_tags(htmlspecialchars($_POST['проверяемое_поле_2'])));
//1)
//ЗАНОСИМ В БАЗУ ИЛИ
//ДЕЛАЕМ ДАЛЬНЕЙШИЕ ОПЕРАЦИИ
//2)
//ДЕЛАЕМ РЕДИРЕКТ ПОЛЬЗОВАТЕЛЯ
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); // С доп. $_GET параметром status=ok к примеру
} else {
print_r($errors);
}
}
include ('tpl/header.html');
include ('tpl/index.html');
include ('tpl/footer.html');
$out = ob_get_contents();
ob_end_clean();
echo $out;
?>
http://phpforum.ru/index.php?showuser=-1
Цитата |
1) Указать куда ему следует перейти. 2) Дать сообщение: "Сейчас Вы будете перемещены" |
//Если ошибок нет
if(count($errors) == 0) {
//Вызываем BB парсер
$my_input[1] = nl2br(bb_tags(htmlspecialchars($_POST['проверяемое_поле_1'])));
$my_input[2] = nl2br(bb_tags(htmlspecialchars($_POST['проверяемое_поле_2'])));
//1)
//ЗАНОСИМ В БАЗУ ИЛИ
//ДЕЛАЕМ ДАЛЬНЕЙШИЕ ОПЕРАЦИИ
//2)
//ДЕЛАЕМ РЕДИРЕКТ ПОЛЬЗОВАТЕЛЯ
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); // С доп. $_GET параметром status=ok к примеру
} else {
print_r($errors);
}
else {
print_r($errors);
}
//2)
//ДЕЛАЕМ РЕДИРЕКТ ПОЛЬЗОВАТЕЛЯ
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); // С доп. $_GET параметром status=ok к примеру
//1)
//ЗАНОСИМ В БАЗУ ИЛИ
//ДЕЛАЕМ ДАЛЬНЕЙШИЕ ОПЕРАЦИИ