Автор Тема: Тэги в сообщении форума 3  (Прочитано 5797 раз)

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

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« : 17 Января 2003, 19:14:57 »
Вроде бы ясно, как удалить тэги из текста:
$post=~s/$post=~s/>/>/g;

Но как сделать, чтобы некоторые тэги игнорировались? Если это простые тэги, типа , то я думаю сделать просто:
$post=~s/<B>//g;  
Но как быть, например, с тэгом ? Ведь внутри его могут быть какие-то атрибуты (напр. ) и простой заменой не обойтись.

И ещё: как сделать, чтобы URL-ы выделялись тэгом ?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Тэги в сообщении форума 3
« Ответ #1 : 17 Января 2003, 19:36:34 »
$post=~s/<FONT (.*)>//gi;
А вообще купи книжку MRE или на сайтах поищи
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Тэги в сообщении форума 3
« Ответ #2 : 17 Января 2003, 19:40:22 »
Хозяйке на заметку
Заменяем теги
sub html_encode 
{
  
	
my ($object$tmp) = @_;
  
	
$tmp =~ s!&!&!g;
  
	
$tmp =~ s!>!>!g;
  
	
$tmp =~ s!<!<!g;
  
	
$tmp =~ s!\\"!"!g;
  
	
return 
$tmp}

Убираем их вообще (работает не по условию а как каток)
sub clearHTML {
	
my ($object$Tmp) = @_;
	
$Tmp =~ s/<.+?>//g;
	
return $Tmp}

Перекодируем в одну и другую сторону:

sub unHTML 
{
    
	
my ($object$Tmp) = @_;
    
	
my %ENT=(\'<\'=>\'lt\',\'>\'=>\'gt\',\'"\'=>\'quot\');
    
	
$Tmp =~ s!([<>"])!&$ENT{$1};!g;
    
	
$Tmp =~ s|<!--|&#60;&#33;&#45;&#45;|g; 
    
	
$Tmp =~ s|-->|&#45;&#45;&#62;|g;
    
	
$Tmp =~ s|<script>|&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;|ig;
    
	
$Tmp =~ s|  |  |g;   
    
	
$Tmp =~ s|^\\$+$|&#36|g;         
    
	
$Tmp =~ s|\\@|&#064;|g;              
    
	
$Tmp =~ s!\\|!&#124;!g;
    
	
$Tmp =~ s|\\{|&#123;|g;     
    
	
$Tmp =~ s|\\}|&#125;|g;        
    
	
$Tmp =~ s|\\\\,|&#44;|g;
    
	
$Tmp =~ s|\\~|&#126;|g;      
    
	
$Tmp =~ s|\'|&#39;|g;
    
	
$Tmp =~ s|\\n|
|g;         
    
	
$Tmp =~ s|\\s+$||g;        
    
	
$Tmp =~ s|\\$|&#36|g;
    
	
$Tmp =~ s|\\r||g;              
    
	
$Tmp =~ s!\\\\!&#92;!g;
    
	
return $Tmp}

sub doHTML {
    
	
my $object = shift;
    
	
my $Tmp = $_[0];
    
	
$Tmp =~ s/&#064;/\\@|g;              
    
	
$Tmp =~ s/&#39;/\'/g;    
    
	
$Tmp =~ s/\\</</g;     
    
	
$Tmp =~ s/\\>/>/g;
    
	
$Tmp =~ s!&#36!\\$!g;    
    
	
$Tmp =~ s/&#124;/\\|/g;   
    
	
$Tmp =~ s/&#43;/\\+/g;
    
	
$Tmp =~ s/&#42;/\\*/g;   
    
	
$Tmp =~ s/&#41;/\\)/g;    
    
	
$Tmp =~ s/&#40;/\\(/g;
    
	
$Tmp =~ s/&#44;/,/g;    
    
	
$Tmp =~ s/&#125;/\\}/g;   
    
	
$Tmp =~ s/&#123;/\\{/g;
    
	
$Tmp =~ s/&#92;/\\\\/g;   
    
	
$Tmp =~ s/"/"/g;    
    
	
$Tmp =~ s/&/&/g;
    
	
return $Tmp}

 
Chs, может в факе раздел по регуляркам завести?
« Последнее редактирование: 18 Января 2003, 14:03:13 от NeoNox »
The documentations is your friend


Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #4 : 18 Января 2003, 00:26:27 »
Цитировать
$post=~s/<FONT (.*)>//gi;
А вообще купи книжку MRE или на сайтах поищи

Что за книжка? Расшифровать можешь?
Что касаемо фака по рег. выр-ям, то вещь, думаю, для неофитов полезная будет.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Тэги в сообщении форума 3
« Ответ #5 : 18 Января 2003, 13:58:16 »
Mastering Regular Expressions
Автор: Jeffrey E. F. Friedl
http://www.oreilly.com/catalog/regex/
Здесь в pdf http://www.bosconet.org/UNIX/unix/Mastering%20Regular%20Expressions/
На русский она также переведена: Регулярные выражения
Автор тот-же. ;)
The documentations is your friend

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #6 : 18 Января 2003, 22:58:11 »
Цитировать
$post=~s/<FONT (.*)>//gi;

А... уважаемый NeoNox я или дурак или что-то, но этот скрипт не работает. Последняя скобка не меняется, а остаётся >

И кстати, как поменять</FONT> на
? Ведь если я пишу $post==~s/</FONT>/
/gi, то PERL первую черту считает за служебную. А экранировать с помощью \\ не выходит.

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #7 : 18 Января 2003, 23:16:05 »
И скрипт для выделения URL\'ов тоже не работает:
Цитировать
Unrecognized character \\xA0.
Что это за символ - я не пойму.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Тэги в сообщении форума 3
« Ответ #8 : 18 Января 2003, 23:34:23 »
Цитировать
$post=~s/<FONT (.*)>//gi;

Я бы сказал:

$post=~s/<FONT(.*?)>//gi;

Помятую про "жадность" квантификаторов.
Цитировать
И кстати, как поменять</FONT> на ? Ведь если я пишу $post==~s/</FONT>/ /gi, то PERL первую черту считает за служебную. А экранировать с помощью \\ не выходит.


$post=~s|</FONT>|
|gi,

, например

perldoc perlre :)
2B OR NOT 2B = FF

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #9 : 18 Января 2003, 23:39:40 »
Цитировать
perldoc perlre

Опять :) Да читал я его, даже перевод русский есть.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Тэги в сообщении форума 3
« Ответ #10 : 18 Января 2003, 23:46:05 »
Цитировать
Unrecognized character \\xA0.

Что это за символ - я не пойму.

Cимволы перед и после "=~" удали и поставь пробелы.:)
2B OR NOT 2B = FF

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Тэги в сообщении форума 3
« Ответ #11 : 18 Января 2003, 23:52:01 »
Цитировать

perldoc perlre

Опять Да читал я его, даже перевод русский есть.

Тогда еще
perldoc perlop в части Quote and Quote-like Operators
и Regexp Quote-Like Operators
2B OR NOT 2B = FF

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #12 : 19 Января 2003, 00:25:30 »
Если я удалю "символы", тогда естественно, всё будет работать, т.к. вообще не будет этого кода. Ты разъясни поконкретнее.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Тэги в сообщении форума 3
« Ответ #13 : 19 Января 2003, 00:37:55 »
Цитировать
Если я удалю "символы", тогда естественно, всё будет работать, т.к. вообще не будет этого кода. Ты разъясни поконкретнее.

Один символ до "=~" и один после и заменить пробелами. Так понятнее?
2B OR NOT 2B = FF

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Тэги в сообщении форума 3
« Ответ #14 : 19 Января 2003, 00:51:44 »
Ага,  а теперь так:
 /([^w"=[]]|[A\\nb])\\*(w+://[^<>s\\n"][]+)/: unmatched [] in regexp

Вроде тут всё закрыто или нет?

 

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