Simple I am trying to replace all urls with a href
You mean, urls in text nodes? Someting like this?
use Modern::Perl;
use HTML::Parser;
use Regexp::Common qw( URI );
my $parser = HTML::Parser->new
(
default_h => [sub {
my $something = shift;
print $something
}, 'text'],
text_h => [sub {
my $text = shift;
# Guess a bit and add a scheme to www
# This might be bit too aggressive
$text =~ s^ www\.^ http://www.^gi;
# Replace URLs in the text by links
$text =~ s^($RE{URI})^<a href="$1">$1</a>^g;
print $text;
}, 'text'],
);
$parser->parse( join "", <DATA>) || die $!;
__DATA__
<!DOCTYPE html>
<html>
<head><title>Test data </title></head>
<body>
Some URL without scheme www.perlmonks.org
and a plain URL with scheme http://perl.org
and even ftp ftp://ftpserver.foo.com
and an existing <a href="https://metacpan.org/">link</a>
</body>
</html>
Output:
<!DOCTYPE html>
<html>
<head><title>Test data </title></head>
<body>
Some URL without scheme <a href="www.perlmonks.org">www.perlmo
+nks.org</a>
and a plain URL with scheme <a href="http://perl.org">http://p
+erl.org</a>
and even ftp <a href="ftp://ftpserver.foo.com">ftp://ftpserver
+.foo.com</a>
and an existing <a href="https://metacpan.org/">link</a>
</body>
</html>
holli
You can lead your users to water, but alas, you cannot drown them.
|