Источник 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&id=11111
<img src="https://foo.com/useravatar%3Fsize%3Dsmall%26id%3D11111">
Когда URL вставлен вне src
атрибут, он правильно экранирован. Но когда он вставлен внутри src
атрибут, он искажается.
1 ответ
Экранирование, которое вы заметили, предназначено для
<img src="https://foo.com/useravatar?size=small&id=[+ $avatar_id +]">
Вы можете изменить режим выхода. использование
<img src="[+ do { local $escmode = 1; $issue->{avatar}{url} } +]">
производить
<img src="https://foo.com/useravatar?size=small&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__,
});