【问题标题】:How should I redirect users in a formmail script?我应该如何在 formmail 脚本中重定向用户?
【发布时间】:2010-03-26 13:28:41
【问题描述】:

所以我使用的是基本的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

您可以看到& 字符被替换为&

有没有办法解决这个问题?

【问题讨论】:

  • @Elliot 这个重定向 URL 是在哪里指定的?如果它位于 HTML 源代码的“隐藏”输入字段中,请立即停止使用该脚本并考虑将托管它的服务器放在酸浴中;-) 这对您的用户(和您)来说是危险的。

标签: perl forms webforms cgi formmail


【解决方案1】:

也许您可以使用字符串替换来编辑脚本:

$myRedirectURL =~ s/\&/\&/g;

或者也许查看发生相反替换的脚本,并注释掉该步骤。

【讨论】:

    【解决方案2】:

    HTML::Entities 的 decode_entities 可以为您解码:

    $redirect_target = decode_entities($redirect_target);
    

    但是将目标 URL 作为 HTTP 参数(例如隐藏的表单字段)传递是危险的(正如 @SinanÜnür 在 cmets 中所说的那样)。更好地将目标 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';
    

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2011-04-28
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2023-03-23
      • 2012-10-23
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多