OSDN Git Service

Model::Util: add escape_plaintext method
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Model / Util.pm
1 package Newslash::Model::Util;
2 use Newslash::Model::Base -base;
3
4 use Data::Dumper;
5 use Mojo::Log;
6
7 use EscapeHTML qw();
8 use HTML::Tidy;
9
10 =head2 clean_html(\%allowed, $html)
11
12 escape and tidy HTML
13
14 =over 4
15
16 =item Parameters
17
18 =over 4
19
20 =item $html
21
22 input HTML
23
24 =item \%allowed
25
26 allowed tag and attribute
27
28 =back
29
30 =item Return value
31
32 tidied HTML
33
34 =back
35
36 =cut
37
38 sub clean_html {
39     my ($self, $allowed, $html) = @_;
40     my $escaped = $self->escape_html($allowed, $html);
41     $escaped = EscapeHTML::blank_line_to_paragraph($escaped);
42
43     my $tidy = HTML::Tidy->new( {
44                                  tidy_mark => 0,
45                                  doctype => 'omit',
46                                  'show-body-only' => 1,
47                      } );
48     my $tidied = $tidy->clean($escaped);
49     return $tidied;
50 }
51
52
53 =head2 escape_html(\%allowed, $html)
54
55 escape  HTML
56
57 =over 4
58
59 =item Parameters
60
61 =over 4
62
63 =item $html
64
65 input HTML
66
67 =item \%allowed
68
69 allowed tag and attribute
70
71 =back
72
73 =item Return value
74
75 escaped HTML
76
77 =back
78
79 =cut
80
81 sub escape_html {
82     my ($self, $allowed, $html) = @_;
83     return EscapeHTML::escape($allowed, $html);
84 }
85
86
87 =head2 escape_plaintext($text)
88
89 escape  HTML
90
91 =over 4
92
93 =item Parameters
94
95 =over 4
96
97 =item $text
98
99 input plain text
100
101 =back
102
103 =item Return value
104
105 escaped text
106
107 =back
108
109 =cut
110
111 sub escape_plaintext {
112     my ($self, $text) = @_;
113
114     my $t = $text->replace(qr/&(?!|lt;|gt;)/, '&');
115     $t = $t->replace(qr/</, '&lt;');
116     $t = $t->replace(qr/>/, '&gt;');
117     return $t;
118 }
119
120 1;