Итак, я использую базовый скрипт formmail. В скрипте я использую переменную перенаправления. Значение перенаправления выглядит примерно так:
http://www.mysite.com/NewOLS_GCUK_EN/bling.aspx?BC=GCUK&IBC=CSEE&SIBC=CSEE
Однако, когда происходит действие перенаправления, в браузере отображается URL-адрес:
http://www.mysite.com/NewOLS_GCUK_EN/bling.aspx?BC=GCUK&IBC=CSEE&SIBC=CSEE
Вы видите, что & символы заменены на &
&
&
Есть ли способ это исправить?
HTML :: Entities * decode_entities может расшифровать это для вас:
$redirect_target = decode_entities($redirect_target);
Но передача URL-адреса назначения в качестве аргумента HTTP (например, скрытое поле формы) опасна (как уже сказал @Sinan ünür в комментариях). Лучше сохранить целевой URL в вашем скрипте и передать селектор из формы:
if ($selector eq 'home') { $target_url = 'http://www.foo.bar/'; } elsif ($selector eq 'bling') { $target_url = 'http://www.foo.bar/NewOLS_GCUK_EN/bling.aspx'; } else { $target_url = 'http://www.foo.bar/default.html'; # Fallback/default value }
Использование хэша будет короче:
my %targets = { home => 'http://www.foo.bar/', bling => '/NewOLS_GCUK_EN/bling.aspx', }; $target_url = $targets{$selector} || '/default_feedback_thanks.html';
Может быть, вы можете отредактировать скрипт с подстановкой строки:
$myRedirectURL =~ s/\&/\&/g;
Или, возможно, посмотрите в сценарии, где происходит противоположная замена, и закомментируйте этот шаг.