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 に答える