将href perl变量转换为普通标量变量

时间:2017-10-31 10:01:39

标签: javascript html perl cgi

我想要比较这两个变量。它们都具有相同的值,但是,一个是href变量 - 意思是,它是从这样的文件中读取的

<a href=http://google.com>Variable</a>

它是这样的,但在浏览器中显示为锚标记,所以当我使用print "$collect_zids{$key} --> $temp";比较值时,我在浏览器中看到

变量 - &gt;的 Variable

How it appears in the browser. One text another link.

我假设这两个值不同,因此该代码无法运行

if($collect_zids{$key} eq $from_picture){
    print "<h1>Hello</h1>";
}

有没有办法可以将href变量转换为普通的标量变量,以便我可以比较它们?

谢谢!

P.S。我认为Javascript可能是唯一的方式,但是,我没有任何经验。

2 个答案:

答案 0 :(得分:2)

没有“href变量”这样的东西。你有两个标量变量。一个包含纯文本,另一个包含HTML。您的任务是从HTML变量中提取HTML <a>标记内的文本,并将该文本与纯文本变量中的文本进行比较。

这样做的一种方法是从HTML变量中删除HTML。

my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';

$html =~ s/<.+?>//g;

if ($html eq $text) {
  say "Equal";
} else {
  say "Not Equal [$html/$text]";
}

但不能强调的是,使用正则表达式解析HTML非常脆弱,并且保证在许多情况下不起作用。使用真正的HTML解析器要好得多。 HTML::Strip是为了这个目的而制作的。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';
use HTML::Strip;

my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';

my $parser = HTML::Strip->new;
$html = $parser->parse($html);

if ($html eq $text) {
  say "Equal";
} else {
  say "Not Equal [$html/$text]";
}

值得指出的是,这已在Perl FAQ

中得到解答
  

如何从字符串中删除HTML?

     

使用HTML :: Strip或HTML :: FormatText,它不仅可以删除HTML,而且还可以删除HTML   还尝试对结果平原进行一些简单的格式化   文本。

更新:在评论中,您说

  

我无法使用这些方法,因为我没有明确定义变量。

显然不是这样。如何初始化变量对于如何使用变量没有任何影响。

我假设您的HTML文本位于变量$from_picture中,因此您将使用以下代码删除HTML:

my $parser = HTML::Strip->new;
my $stripped = $parser->parse($from_picture);

if($collect_zids{$key} eq $stripped){
  print "<h1>Hello</h1>";
}

我不知道你在哪里想到你不能使用我的解决方案,因为我直接初始化变量,你从文件中读取数据。编程的一项重要技能是能够查看复杂情况并提取相关细节。看来你需要在这个领域做更多的工作: - )

答案 1 :(得分:0)

我使用Perl模块HTML::FormatText;

找到答案
use HTML::FormatText;
my $formatter = HTML::FormatText->new();
my $string = HTML::FormatText->format_file("path_to_the_file"); #$string variable to hold the result and the path must be for a file.

使用HTML::FormatText模块后,我能够获取正在读取的原始字符串,而不是将其解释为HTML。所以,我收到的是<a href=http://google.com>Variable</a>,而不仅仅是Variable。获取原始字符串后,我可以使用正则表达式来提取我需要的部分。

归功于 - https://metacpan.org/pod/HTML::FormatText