Источник img - переменная, URL кодируется

У меня есть многоуровневый хэш, в котором у меня есть URL аватара пользователя.

Я пытаюсь создать ячейку с " изображением Джейн Доу", но при запуске кода 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 атрибут, он искажается.

1 ответ

Экранирование, которое вы заметили, предназначено для

<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__,
});
Другие вопросы по тегам