-# temporarily swap > for escape so our s!! to add href works.
-# there's probably a way to do this with only a single s!! ...
-$str =~ s!>!\e!g;
-$str =~ s!\b((ftp|https?)://[\w+\+\&\?\.\%\;/#-]+)!<a\nhref="$1"\n>$1</a>!g;
-$str =~ s!\e!>!g; # swap escapes back to >
+my $str = eval { local $/; <> };
+my $title = $ENV{TITLE};
+($title) = ($str =~ /\A([^\n]+)/) unless $title;
+$title = ascii_html($title);
+my $l = PublicInbox::Linkify->new;
+$str = $l->linkify_1($str);
+$str = ascii_html($str);
+$str = $l->linkify_2($str);