Perl:转义从变量扩展的双引号

Perl: Escaping the double-quotes expanded from a variable

如何获得

my $name = 'John "FOO" Rambo';

扩展到

<span title=\"The great and mighty $name\"

类似于

<span title=\"The great and mighty John \"FOO\" Rambo\"</span>

而不是

<span title=\"The great and mighty John "FOO" Rambo\"

这样我的 html 标签在生成页面时不会被破坏并且名称包含 " ?

使用&quot;

可以得到正确的HTML
my $name = 'John "FOO" Rambo';
$name =~ s/"/&quot;/g;
my $html = "<span title=\"The great and mighty $name\"/>";
print $html ."\n";

澄清你原来的问题:

您可以使用简单的正则表达式来代替引号。 示例:

my $name = 'John "FOO" Rambo';
$name =~ s/"/\"/g;
my $html = "<span title=\"The great and mighty $name\"/>";
print $html ."\n";

这个

$name =~ s/"/\"/g;

简单地说用\"替换所有"(但由于\是特殊字符,需要转义为\"

g 表示 globally,即字符串中所有出现的地方。

(即,如果您 运行 仅 $name =~ s/"/\"/;,则 $name 将是 John \"FOO" Rambo,但如果 g 则为 John \"FOO\" Rambo

但这不会产生有效的 HTML

正确的HTML如下:

<span title="The great and mighty John &quot;FOO&quot; Rambo">...</span>

您可以通过以下方式获取:

use HTML::Entities qw( encode_entities );

my $html = '<span title="' . encode_entities("The great and mighty $name") . '">...</span>';
   -or-
my $html = '<span title="The great and mighty ' . encode_entities($name) . '">...</span>';

您可能应该使用模板系统。如果您使用 Template-Toolkit,模板将是

<span title="The great and mighty [% name | html %]">...</span>