parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

все проверено, проблемы не решились :( pls help!

Анубис 11.11.2003 10:20

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

Итак, есть сообщения форума, записанные в б.д. и соответственно эти же сообщения мне и нужно постить, учитывая при этом непечатные символы (энтеры и табуляцию) никакого другого оформления не нужно. При этом необходимо запретить обработку любого кода, который может быть внесен в поле формы.

Для примера взял код Гостевой книги из уроков по Прасеру и вот что получилось.
## в файле gbook.p создаю класс
@CLASS
gbook

@load[]
## создание тестовой таблицы сообщений из форума

$messages[^table::create{author	email	date	body
Пушкин	pushkin@mail.ru	2003-11-01	О сколько нам открытий чудных, готовит <b>просвещенья</b> дух
Некрасов	nekrasov@hotmailcom	2003-10-11	Великий русский поэт
Гагарин	gagarin@rambler.ru	2002-03-04	Первый космонавт
}]

@show_messages[] 
^if($messages){ 
   ^messages.menu{ 
      <table width="100%"> 
         <tr> 
         <td align="left"><b>$messages.author 
            ^if(def $messages.email){ 
               $messages.email 
            }{ 
               Нет электронного адреса 
            }</b> 
         </td> 
         <td align="right">$messages.date</td> 
         </tr> 
      </table> 
      <table width="100%"> 

## вношу в сообщение форума «энтер» 
	  $repl[^table::create{from	to
открытий	<br>}]

## печатаем преобразованный текст
      <tr>
         <td>^messages.body.replace[$repl]</td>
      </tr> 
      </table> 
   }[<table width="100%" border="0" bgcolor="000000" cellspacing="0">  
        <tr><td>&nbsp^;</td></tr>
   </table>] 
}{ 
   Гостевая книга пуста. 
} 

@show_form[] 
<hr> 
<br> 

$date[^date::now[]] 
<center> 
<form method="POST"> 
<p> 
Author<sup>*</sup><input name="author"><br> 
E-mail&nbsp;&nbsp;<input name="email"> 
<br>text<br><textarea cols="50" name="text" rows="5"></textarea> 
</p> 
<p> 
<input type="submit" value="Send" name="post">&nbsp;&nbsp;&nbsp; 
<input type="reset" value="Cancel"> 
</p> 
</form> 
</center> 

@test_and_post_message[] 
^if(def $form:post){ 
   ^if(def $form:author){ 
      ^MAIN:dbconnect{ 
         ^void:sql{insert into gbook 
            (author, email, date, body) 
         values ( 
            '$form:author', 
            '$form:email', 
            '${date.year}-${date.month}-${date.day}', 
            '$form:text' 
         )} 
      } 
      $response:location[$request:uri] 
   }{ 
      <center>Поле автор обязательно для заполнения</center> 
   } 
}
А вызываю класс из index.html таким образом
@USE
gbook.p
#########
$gb[^gbook::load[]] 
^gb.show_messages[] 
^gb.show_form[] 
^gb.test_and_post_message[]
Получаем вот такой результат:
Пушкин	pushkin@mail.ru		2003-11-01
О сколько нам 
чудных, готовит просвещенья (выделенно жирным) дух

Некрасов	nekrasov@hotmail.com	2003-10-11
Великий русский поэт

Гагарин	gagarin@rambler.ru	2002-03-04
Первый космонавт
Т.е. поскольку и перевод строки в первом сообщении получился и слово «просвещенье» жирным шрифтом, то это не то, что мне нужно. Нужно, чтобы остался перевод строки, а слово «просвещенье» вывелось без форматирования.

Ситуация говорит о том, что где-то данные untiant’ятся, но где понять не могу.
Ошибка наверняка есть, но я найти не могу. Пожалуйста помогите!

А то что сделать то о чем я говорю можно, говорит хотя бы этот форум. Энтеры и табуляции совершенно правильно обрабатываются и в тоже время хтмл код игнорируется.