gpt4 book ai didi

ruby-on-rails-3 - 为什么使用 link_to 生成 url 时 & 符号会被转义?

转载 作者:行者123 更新时间:2023-12-03 00:48:52 24 4
gpt4 key购买 nike

这是我的简单的 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>

问题在于&被重写为&。我不知道如何防止转义,因为 Rails 3 中不存在 :escape => 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, tracker:"email", url:@product.url)) %>

这可能会解决您的具体问题,这是第二种方法,而更多的暴力也应该起作用......

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

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

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

更新 2:修复了对 cgi unescape 的调用,当时使用的是“.”。当它应该是“::”时并修复格式。忘记缩进 #1 的示例

关于ruby-on-rails-3 - 为什么使用 link_to 生成 url 时 & 符号会被转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com