加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 为什么在使用link_to生成url时,&符号会

发布时间:2020-12-17 01:21:36 所属栏目:百科 来源:网络整理
导读:这是我简单的rails 3代码: %= link_to "link",gateway_index_url(developer:@item.developer.api_key,tracker:"email",url:@product.url) % 结果是: a href="/gateway?developer=abcdeamp;tracker=emailamp;url=http%3A%2F%2Fwww.bla.fr%2FproductA" link/
这是我简单的rails 3代码:
<%= link_to "link",gateway_index_url(developer:@item.developer.api_key,tracker:"email",url:@product.url) %>

结果是:

<a href="/gateway?developer=abcde&amp;tracker=email&amp;url=http%3A%2F%2Fwww.bla.fr%2FproductA" >link</a>

问题在于&在& amp;中被重写.我无法想象如何防止转义,如:escape => Rails 3中不存在false

解决方法

更新:所以这是源头
def link_to(*args,&block)
    if block_given?
      options      = args.first || {}
      html_options = args.second
      link_to(capture(&block),options,html_options)
    else
      name         = args[0]
      options      = args[1] || {}
      html_options = args[2]

      html_options = convert_options_to_data_attributes(options,html_options)
      url = url_for(options)

      href = html_options['href']
      tag_options = tag_options(html_options)

      href_attr = "href="#{ERB::Util.html_escape(url)}"" unless href
      "<a #{href_attr}#{tag_options}>#{ERB::Util.html_escape(name || url)}</a>".html_safe
    end
  end

我们可以从源头看到,这种行为是设计的.

您可以尝试两种解决方案中的一种,我没有尝试过,但它们应该可以工作

1.)尝试将呼叫置于对#raw的调用内部:

<%= link_to "link",raw(gateway_index_url(developer: @item.developer.api_key,url:@product.url)) %>

这可能会解决你的具体问题,这是第二种方法,而更强大的力量也应该有效……

2.)如果你想将它(整个href)转换回来,你可以…使用CGI :: unescape_html:

<%= CGI::unescape_html(link_to "link",gateway_index_url(developer: @item.developer.api_key,url:@product.url)) %>

祝你好运,希望这会有所帮助.

更新2:修复了对cgi unescape的调用,正在使用“.”什么时候它应该是“::”和格式化修复.忘了为#1缩进示例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读