2015-02-25 2 views
2

У меня есть многоуровневый хеш, в котором у меня есть URL-адрес аватара пользователя.Источник Img - переменная, 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, он становится искалеченным.

+0

Я добавил код, но я не думаю, что поможет здесь. – Iluvatar14

+1

Есть немного искусства, чтобы задать хороший вопрос. Вам нужно предоставить достаточную информацию, которую кто-то может понять, что вы имеете в виду, посмотрите на места, где это может пойти не так, и предложить решения. Чем меньше информации вы даете, тем больше зависит, что вы на кого-то сталкиваетесь с той же проблемой и понимаете, что они сделали, чтобы исправить это. Вот почему [спросить] есть - дать указания о том, как получить лучший ответ. Люди на SO _like вопросы, на которые они могут ответить - их здесь не будет. – Sobrique

ответ

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__, 
}); 
+0

Не критикуйте свой ответ, но нет ли лучшего способа сделать это? Это выглядит подпунктом и беспорядочным. Разумеется, я не удивлюсь, что это «разрешенный Embperl» способ. – Dre

+1

Я намеренно выбрал более сложное решение на всякий случай, когда вы попросили меня упростить его! – ikegami

+1

Если вы не создаете какие-либо URL-адреса, например '', вы можете установить его глобально вместо локального (например, '[- $ escmode = 1 -]'. – ikegami

 Смежные вопросы

  • Нет связанных вопросов^_^