Skip to content

Instantly share code, notes, and snippets.

@gardejo
Created July 16, 2009 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gardejo/148523 to your computer and use it in GitHub Desktop.
Save gardejo/148523 to your computer and use it in GitHub Desktop.
HTML::Shakan::Renderer::HTML::SelectivelyEncodable
package HTML::Shakan::Renderer::HTML::SelectivelyEncodable;
use HTML::Shakan::Utils;
use Any::Moose '::Role';
sub selectively_encode {
my ($self, $label) = @_;
my $label_for_render = $label;
my $prefix = q{};
my $suffix = q{};
if (
$label_for_render =~ s{
\A
(
<
[^>]+
>
)?
(
.+?
)
(
<
[^>]+
>
)?
\z
}{$2}xms
) {
$prefix = defined $1 ? $1 : q{};
$suffix = defined $3 ? $3 : q{};
}
return $prefix . encode_entities($label_for_render) . $suffix;
}
no Any::Moose '::Role';
1;
__END__
=head1 DESCRIPTION
labelに項目ガイドへのリンクを仕込んでも、しっかりエスケープされるので、
&lt;label for=&quot;foo&quot;&gt;&lt;a href=&quot;http://sample.example/help/foo/&quot;&gt;foo&lt;/a&gt;&lt;/label&gt;
エスケープされる範囲を限定してしまう。
<label for="foo"><a href="http://sample.example/help/foo/">foo</a></label>
=head1 SEE ALSO
=over 4
=item HTML::Shakan::Renderer::HTML::DefinitionList
http://gist.github.com/148522
=item HTML::Shakan::Renderer::HTML::SelectivelyEncodable
http://gist.github.com/148523
=item HTML::Shakan::Renderer::HTML::DateTimeSeparatable
http://gist.github.com/148524
=back
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment