perl 测试内容以查看是不是包含 HTML

Posted

技术标签:

【中文标题】perl 测试内容以查看是不是包含 HTML【英文标题】:perl test content to see if contains HTMLperl 测试内容以查看是否包含 HTML 【发布时间】:2013-05-11 17:07:59 【问题描述】:

我想测试用户提交的内容以查看是否包含 html,并且我更愿意这样做而不必编写自己的正则表达式。有谁知道在 perl 中执行此操作的模块或执行此操作的好方法?

【问题讨论】:

您应该检查<> 字符。 if ($content =~ /[<>]/) .. @mpapec - 如果提交的内容中有以下文字:“1 2”怎么办? 请问你为什么想知道? 它仍然是 html,虽然无效。 :) 我会看看search.cpan.org/~gaas/HTML-Parser-3.71/lib/HTML/Entities.pm 在我看来像 XY problem... 【参考方案1】:

您可以检查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"  />

    text with html
==cut-here==

plain

text here

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

将检查 4 块文本并检测 html。如果您配置了HTML::Restrict,您也可以检查“允许”和“不允许”HTML 标签。

【讨论】:

很好,删除了 HTML,但我只需要知道内容是否包含 HTML。我尝试在通过 HTML::Restrict 和之后比较内容,但 HTML::Restrict 也会删除尾随的新行,因此会出现问题,因为它可能会说之前和之后不相等(暗示那里已删除 HTML),而实际上只有一个额外的新行 @srchulo 您可以从两者中删除所有空格并在之后进行比较。如果它们相同 - 不包含 HTML。编辑了示例。

以上是关于perl 测试内容以查看是不是包含 HTML的主要内容,如果未能解决你的问题,请参考以下文章

Perl 的文件测试运算符 -f 对符号链接返回 true

如何在 Perl 测试套件中并行运行一些但不是所有测试?

使我的文件以 Perl 或 HTML 可读

如何检查一个文件的值是不是包含在另一个文本文件中? (perl 脚本)

如何查看文件或文件夹是不是未选中“包含可继承权限”?

使用正则表达式查看单元格是不是包含 Google 表格中的表情符号