Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Гостевая и теги в ней
 
 автор: Sonic   (30.07.2004 в 20:26)   письмо автору
 
 

Я бесконечно рад за вашу помощь, спасибо!

У меня есть такой вопрос, вот я написал гостевую, элементарнийшую, так вот проблема. Пока пусть будет без замен тегов <b> на

Гостевая работает так. Открываем файл, записываем в него с определёнными параметрами текст

$fp = fopen("mess.dat","a+");
fwrite($fp,"<b>Сегодня:</b> <font color='green'>$date</font><br>---------------<br><b>Ваше имя:</b> $name<br><b>Ваше мыло:</b> $email<br><b>Сообщение:</b> $mess<br><hr>");
fclose($fp);

, и потом его выводим.
Вопрос в том, что когда я в сообщении пишу тег <b> и не закрываю его. То всё потом жирное, то есть надо както проверять и закрывать все открытые тег в пределах сообщения...

   
 
 автор: cheops   (30.07.2004 в 21:31)   письмо автору
 
   для: Sonic   (30.07.2004 в 20:26)
 

Лучше заменить теги на квадратные, и осуществлять последовательный поиск - находим начало [t] и переводим его только в том случае, если ему соответствует конец, [/t]. Если конца мы не находим, то и преобразование не осуществляется, в этом случае, вместо жирного текста посетители увидят тег [t] - это менее страшно...

   
 
 автор: Sonic   (30.07.2004 в 21:36)   письмо автору
 
   для: cheops   (30.07.2004 в 21:31)
 

А можно функцию узнать поиска?

   
 
 автор: cheops   (30.07.2004 в 21:55)   письмо автору
 
   для: cheops   (30.07.2004 в 21:31)
 

Тогда поиск можно осуществлять примерно следующим образом:
<?php
  // Исходная строка
  $postbody = "[ b]Это[ /b] очень жирный [ b]текст[ /b].";
  // Результирующая строка
  $result = "";
  // Вспомогательные переменные
  $lastocc = 0;
  $sndocc = 1;
  while($sndocc)
  {
    // Начало жирного фрагмента
    $fstocc = strpos($postbody, "[ b]", $lastocc);
    // Завершение жирного фрагмента
    $sndocc = strpos($postbody, "[ /b]", $fstocc);
    if(($fstocc>0 && $sndocc>0 && $lastocc>0) || ($fstocc >= 0 && $sndocc>0 && $lastocc == 0))
    {
      // Помещаем фрагмент до тега [ b] в строку $result
      $result .= substr($postbody, $lastocc, $fstocc - $lastocc);
      // Жирный фрагмент
      $result .= "<b>".substr($postbody, $fstocc + 3, $sndocc - $fstocc - 3)."</b>";
      $lastocc = $sndocc + 4;
    }
    else
    {
      // Подбираем остатки строки
      $result .= substr($postbody,$lastocc,strlen($postbody)-$lastocc);
      // Выходим из цикла
      break;
    }
  }
  echo $result;
?>

Если всё-таки захотите всё оставить на совести посетителя, то можно просто написать
<?php
    // Исходная строка
    $postbody = "[ b]Это[ /b] очень жирный [ b]текст[ /b].";
    $postbody = str_replace("[ b]","<b>",$postbody);
    $postbody = str_replace("[ /b]","</b>",$postbody);
    echo $postbody;
?>

   
 
 автор: cheops   (30.07.2004 в 22:05)   письмо автору
 
   для: cheops   (30.07.2004 в 21:55)
 

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

   
 
 автор: Sonic   (30.07.2004 в 22:06)   письмо автору
 
   для: cheops   (30.07.2004 в 21:55)
 

Огромное спасибо :)