2013-05-16 20 views
2

我想測試用戶提交的內容,看看是否包含HTML,我寧願這樣做,而不必編寫自己的正則表達式。有沒有人知道這是一個模塊,或者這是一個很好的方式在Perl中做到這一點?perl測試內容,看看是否包含HTML

+0

你應該檢查'<' and '>'字符。 'if($ content =〜/ [<>] /){..}' –

+0

@mpapec - 如果在提交的內容中有以下內容:「1 < 2 and 3 > 2」? – Kenosis

+0

請問你爲什麼想知道? – innaM

回答

2

您可以檢查HTML::Restrict模塊允許將內容僅限制在允許的標籤中。

實施例:

use 5.012; 
use strict; 
use warnings; 
use HTML::Restrict; 
use Data::Dumper; 

my @texts = map { { "has_html", 0, "text", $_ } } 
      split(/==cut-here==/, do{ local $/; <DATA> }); 

my $res = HTML::Restrict->new(); 

foreach my $text (@texts) { 
    my $tmp = $text->{text}; 
    my $plain = $res->process($tmp); 
    $plain =~ s/\s//gs; 
    $tmp =~ s/\s//gs; 
    $text->{has_html} = $tmp cmp $plain ? "YES" : "NO"; 
} 
say Dumper(\@texts); 

__DATA__ 

    <img src="image.jpg" alt="tricky>text" /> 

    text with html 
==cut-here== 

plain 

text here 

==cut-here==again <!-- a > b --> with html==cut-here== 
plain 

將檢查4塊的文本和檢測用於HTML。如果您配置HTML::Restrict,則可以使用「允許」和「不允許」HTML標籤進行檢查。

+0

好,它刪除了HTML,但我只需要知道內容是否包含HTML。我在嘗試通過HTML :: Restrict和After之後比較內容,但HTML :: Restrict也會刪除尾隨的新行,因此可能會提出一個問題,因爲它可能會說前後不一致(暗示存在被刪除的HTML),當真的只是一個額外的新行 – srchulo

+1

@schululo你可以從兩個刪除所有的空白和比較之後。如果它們相同 - 不包含HTML。編輯示例。 – jm666

+0

這是一個很好的解決方案。謝謝! – srchulo

相關問題