Автор Тема: Тег code  (Прочитано 5796 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Secandr

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« : 23 Января 2003, 21:48:56 »
У меня вот какая проблема: я понятия не имею как сделать тег [ code ][/ code ] в своём форуме.
Как заменить [ b ]txt[/ b ] на txt я знаю, а здесь проблема другая: Мне нужно заменить тег [ code ] на
, но сделать это так, чтобы теги и спец символы внутри [ code ][/ code ] остались без изменения.

Тоесть нужно заменить
[ b ][ i ]bold[ /i ][ /b ] [ code ][ b ][ i ]bold[ /i ][ /b ] - bold and italic text [ /code ]
На
bold
[ b ][ i ]bold[ /i ][ /b ] - bold and italic text 


P.S. Пробелов в тегах нет.
// Secandr

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Тег code
« Ответ #1 : 23 Января 2003, 23:25:48 »
А в чем проблема?
Сначала htmlspecialchars на то, что внутри code, затем str_relpace на скобки.
TANSTAAFL

Оффлайн Secandr

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« Ответ #2 : 23 Января 2003, 23:52:34 »
А можно по подробнее? И желательно на перле.
// Secandr

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Тег code
« Ответ #3 : 24 Января 2003, 17:27:46 »
Цитировать
перле

На перле не могу (это тебе к NeoNox :) ) - его почти забыл. Могу на PHP.
TANSTAAFL

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тег code
« Ответ #4 : 24 Января 2003, 17:37:59 »
my $text=\'[ b ][ i ]bold[ /i ][ /b ] [ code ][ b ][ i ]bold[ /i ][ /b ] - bold and italic text [ /code ]\';
for ($text)
   {
   s/&/&/g;
   s/   s/>/>/g;
   s/\\[(\\/?[a-z]+)\\]/<$1>/ig;
   }

... впрочем, можно еще много проверок ввести.


---
Можно -> в Perl
« Последнее редактирование: 24 Января 2003, 17:44:16 от YA »
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн DELirium

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« Ответ #5 : 24 Января 2003, 20:14:54 »
Приведённый код не работает, или у меня в конец кривые руки.

Вообще я написал немного кода и он вполне великолепно работает:
$in=текст


$in2=$in
while ($in2 =~ s|\\*?)\'\\]([^\\[\\]]*?)\\[\\/url\\]|$2|g){}# Проверка на то написанно ли всё правильно.
while ($in2 =~ s|\\[(\\w)\\]([^\\[\\]]*?)\\[\\/\\1\\]|$2|g){}# Проверка на то написанно ли всё правильно.
if (($in2 =~ m/\\[(b|i|u|quote|code|url|mail)\\]/) || ($in2 =~ m/\\[\\/(b|i|u|quote|code|url|mail)\\]/))
         {print"-----\\n$in2\\n-----";$in=\'\'}


         $in =~ s/\\[b\\]//g;$in =~ s/\\[\\/b\\]/<\\/b>/g;
         $in =~ s/\\[u\\]//g;$in =~ s/\\[\\/u\\]/<\\/u>/g;
         $in =~ s/\\[i\\]//g;$in =~ s/\\[\\/i\\]/<\\/i>/g;
         $in =~ s/\\[i\\]//g;$in =~ s/\\[\\/i\\]/<\\/i>/g;
         $in =~ s|\\[mail\\]([^\\[\\]]*?)\\[\\/mail]|
$1|g;
         $in =~ s|\\[url=\'([^\']*?)\'\\]([^\\[\\]]*?)\\[\\/url]|$2|g;
         $in =~ s/\\[quote\\]/\\\\\\
/g;
         $in =~ s/\\[\\/quote\\]/\\<\\/td\\>\\<\\/tr\\>\\<\\/table\\>/g;


Конечно "немного" убого, но работате.
Проблема в другом:
Необходимо чтобы внутри тега code вообще ничего не менялось. А если я добавлю строку:

$in =~ s/\\[code\\]/
/g;$in =~ s/\\[\\/code\\]/<\\/pre>/g;

то внутри тега code все спец символы заменятся, а мне этого совершенно не надо :(


p.s. А может у скобок [] есть альтернативное написание, как у< => <
///DELirium

Оффлайн Secandr

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« Ответ #6 : 24 Января 2003, 20:27:34 »
как плохо работать двоим за одним компом :(
// Secandr

Оффлайн dymka

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тег code
« Ответ #7 : 25 Января 2003, 14:33:13 »
я делал подобную фишку но немного по-другому:
я создавал хеш-массив преобразований:
code=>\'
VALUE
\',
url => \'VALUE\'
итп...
а потом вызывал функцию, которая все что внутри тегов
[ url ]http://some_host[ /url ]
преобразовывало согласно правилам...
если нужно могу поискать и попробывать прогнать твой примерчик, если пройдет то выложу

P.S.: сорри, немного неправильно понял проблему :) бум думать, мне такое тоже пригодится
« Последнее редактирование: 25 Января 2003, 14:42:52 от dymka »

Оффлайн Secandr

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« Ответ #8 : 25 Января 2003, 15:47:57 »
Я придумал:
я внутри блока [ code]заменю все [ на << Тогда они в дальнейшем не будут обрабатываться.
А после обработки заменю << на [ вот и всё.
Таким образом, у меня в теге коде не будет каких либо изменений
Всё гениальное просто.:)
// Secandr

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тег code
« Ответ #9 : 27 Января 2003, 08:40:33 »
DELirium, а чего не работает? Если внутри [] допускаются пробелы, добавь после \\[ и перед \\] \\s*
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн DELirium

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://del.spd.ru
Тег code
« Ответ #10 : 27 Января 2003, 16:56:46 »
Это вообще Secandr под моим ником писал :)
А так всё сделали.
///DELirium

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28