You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails中避免URL参数的特殊字符被编码?

解决Rails中路由辅助方法自动编码URL参数的问题

我懂你遇到的困扰——Rails的路由辅助方法默认会对参数值里的特殊字符做URL编码,像{CHECKOUT_SESSION_ID}这种占位符直接被转成%7BCHECKOUT_SESSION_ID%7D,完全没法直接给Stripe这类第三方服务用。别担心,这里有几个实用的解决方案:

  • 用raw或html_safe跳过转义
    Rails视图里输出字符串时会自动做HTML转义,这俩方法能告诉Rails保留原始字符:

    # 方法1:使用raw
    raw(new_subscription_url(session_id: '{CHECKOUT_SESSION_ID}'))
    
    # 方法2:调用html_safe
    new_subscription_url(session_id: '{CHECKOUT_SESSION_ID}').html_safe
    

    注意:只有当参数是固定占位符(不是用户输入内容)时才用这个,避免XSS风险。

  • 手动拼接URL
    如果路由辅助方法的编码逻辑太顽固,直接拆分基础URL和参数部分手动拼接:

    "#{new_subscription_url}?session_id={CHECKOUT_SESSION_ID}"
    

    要是你的基础URL已经带其他参数,记得把?换成&就行,适合简单场景。

  • 用解码工具还原原始字符
    先让路由辅助方法生成编码后的URL,再通过工具解码还原:

    # Rails 5+推荐用CGI.unescape
    CGI.unescape(new_subscription_url(session_id: '{CHECKOUT_SESSION_ID}'))
    
    # 旧版本也可以用URI.unescape(已标记过时,但仍可用)
    URI.unescape(new_subscription_url(session_id: '{CHECKOUT_SESSION_ID}'))
    

选哪种方法看你的场景,前两种更直接,第三种适合需要兼容旧代码的情况。

内容的提问来源于stack exchange,提问作者georges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:48:16