gpt4 book ai didi

ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe?

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:15 24 4
gpt4 key购买 nike

考虑一下:

<%
str = "http://domain.com/?foo=1&bar=2"
%>

现在这些情况:

<%=str%>
# output:http://domain.com/?foo=1&amp;bar=2

<%=str.html_safe%>
# output:http://domain.com/?foo=1&bar=2

<%="#{str.html_safe}"%>
# output:http://domain.com/?foo=1&amp;bar=2

<%=""+str.html_safe%>
# output:http://domain.com/?foo=1&amp;bar=2

我需要用其他字符串输出 URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送 &

求助!把我的头发拉到这里:\

编辑:为了澄清,我实际上有一个像这样的数组:

@images = [{:id=>"fooid",:url=>"http://domain.com/?foo=1&bar=2"},...]

我正在创建一个 JS 数组(image_array var)以这种方式在我的应用程序中使用:

image_array.push(<%=@images.map{|x|"{id:'#{x[:id]}',url:'#{x[:url].html_safe}'}"}.join(",")%>);

这会产生:

image_array.push({id:'fooid',url:'http://domain.com/?foo=1&amp;bar=2'},...);

这在我的具体情况下不起作用。我需要没有 amp; 部分的 url

最佳答案

当你写的时候:

"#{foo.bar}"

这~相当于写

foo.bar.to_s

所以你实际上在做的是:

<%=str.html_safe.to_s%>

…Rails 不再认为它是安全的,因此它会通过一轮 HTML 转义来命中您的结果字符串。

我不了解 Rails 的内部结构,但我假设 html_safe 方法使用实例变量扩展字符串对象并将其标记为 OK,但是当您将其包装在另一个实例中时通过插值字符串,您将获得一个没有该标志的新字符串。

编辑:为了满足您的需求,请使用raw 或在您的最终字符串上调用html_safe:

<%=raw "foo#{str}"%>
<%="foo#{str}".html_safe%>

或者在你的情况下:

image_array.push(<%=raw @images.map{…}.join(',')%>);
image_array.push(<%=@images.map{…}.join(',').html_safe%>);

另请参阅 this question .

关于ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232324/

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