2

我有一个多级哈希,其中有用户头像的 URL。

我正在尝试使用“Jane Doe image ”制作一个单元格,但是当代码运行时,URL 正在发生变化。当我将其插入 Embperl 模板时,

https://foo.com/useravatar?size=small&id=11111

变成

https://foo.com/useravatar%3Fsize%3Dsmall%26id%3D11111

如您所见,特殊字符被编码,因此找不到图像。你如何解决这个问题?

use strict;
use warnings;

use Embperl qw( );

our $issue = {
   avatar => {
      url => 'https://foo.com/useravatar?size=small&id=11111',
   },
};

my $template = <<'__EOI__';
[+ $issue->{avatar}{url} +]
<img src="[+ $issue->{avatar}{url} +]">
__EOI__

Embperl::Execute({
   input   => \$template,
   package => __PACKAGE__,
});

这会产生:

https://foo.com/useravatar?size=small&amp;id=11111
<img src="https://foo.com/useravatar%3Fsize%3Dsmall%26id%3D11111">

当 URL 插入到src属性之外时,它会被正确转义。但是当它被插入到src属性中时,它会被破坏。

4

1 回答 1

4

您注意到的转义旨在处理

<img src="https://foo.com/useravatar?size=small&amp;id=[+ $avatar_id +]">

您可以更改转义模式。利用

<img src="[+ do { local $escmode = 1; $issue->{avatar}{url} } +]">

生产

<img src="https://foo.com/useravatar?size=small&amp;id=11111">

在 URL 处获取图像

https://foo.com/useravatar?size=small&id=11111

测试:

use strict;
use warnings;

use Embperl qw( );

our $issue = {
   avatar => {
      url => 'https://foo.com/useravatar?size=small&id=11111',
   },
};

my $template = <<'__EOI__';
<img src="[+ $issue->{avatar}{url} +]">
<img src="[+ do { local $escmode = 1; $issue->{avatar}{url} } +]">
__EOI__

Embperl::Execute({
   input   => \$template,
   package => __PACKAGE__,
});
于 2015-02-25T19:10:21.517 回答