$text =~ s/(\[youtube\])(.+?)(\[\/youtube\])/<iframe width=\"400\" height=\"300\" src=\"http:\/\/www.youtube.com\/embed\/$2\" frameborder=\"0\" allowfullscreen><\/iframe>/isg;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use strict; use warnings; my $text=<<EOT; [youtube][/youtube] [youtube]1234_Abc[/youtube] [youtube]http://www.youtube.de/?v=1234_Abc[/youtube] [youtube]http://www.youtube.de/embed/1234_Abc[/youtube] [youtube]foo bar bam 123[/youtube] EOT $text =~ s#\Q[youtube]\E\s*(?:\Qhttp://www.youtube.\E.+?(?:v=(\w+)|embed/(\w+))|(\w+)|.*?)\s*\Q[/youtube]\E# my $val=$1 || $2 || $3; $_=$val?qq(<iframe width="400" height="300" src="http://www.youtube.com/embed/$val" frameborder="0" allowfullscreen></iframe>):''; #isge; print $text;
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
use Parse::BBCode; use URI::Find; my $finder = URI::Find->new(sub { my ($url) = @_; my $title = $url; if (length($title) > $max_url) { $title = substr($title, 0, $max_url) . "..."; } my $escaped = Parse::BBCode::escape_html($url); my $escaped_title = Parse::BBCode::escape_html($title); my $href = qq{<a href="$escaped">$escaped_title</a>}; return $href; }); my $p = Parse::BBCode->new({ tags => { # parsen von text ausserhalb/innerhalb von tags '' => sub { my $e = $_[2]; my $count = $finder->find(\$e, $escape); $e =~ s/\r?\n|\r/<br>\n/g; $e }, # parsen von [youtube] tags youtube => # code aus meinem anderen posting }, });
2011-05-06T18:54:48 John_WBin Dir für Deine Hilfe wirklich dankbar, auch wenn ich erst mal Dein Programm Teil analysieren muss um damit zuarbeiten.
2011-05-06T18:54:48 John_WEine frage habe ich noch und zwar sind viele User nicht in der Lage eine Adresse, in Beispiel: [*URL*]Test[*/URL*], einzugeben. Können die besagten Module die URL erkennen und die Automatisch Parsen?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; use URI::Find; use CGI; my $text=<<'EOT'; Etwas Text mit einer der URL http://www.example.org drin. das hier geht auch: ftp://ftp.example.org/pub/index.txt ! EOT my $cgi=CGI->new(); my $finder = URI::Find->new(sub{ return $cgi->a({-href=>$_[0]},$_[1]); } ); $finder->find(\$text); print $text;
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 29 30 31 32 33
use strict; use warnings; use Parse::BBCode; my $p = Parse::BBCode->new({ tags => { youtube => { code => sub { my ($parser, $attr, $content) = @_; my $id = $$content; if ($id =~ m{^http://www\.youtube\.(?:de|com)/(?:(?:watch)?\?v=|embed/)(\S*)$}) { $id = $1; } my $escaped = Parse::BBCode::escape_html($id); return qq{<iframe width="400" height="300" } . qq{src="http://www.youtube.com/embed/$escaped" } . qq{frameborder="0" allowfullscreen></iframe>}; }, parse => 0, }, }, }); my $bbcode = do { local $/; <DATA> }; my $html = $p->render($bbcode); print $html; __DATA__ [youtube][/youtube] [youtube]1234_Abc[/youtube] [youtube]http://www.youtube.de/?v=1234_Abc[/youtube] [youtube]http://www.youtube.de/embed/1234_Abc[/youtube] [youtube]foo bar bam 123[/youtube] [youtube]http://www.youtube.com/watch?v=Hg8Fa_EUQqY[/youtube]