作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
考虑一下:
<%
str = "http://domain.com/?foo=1&bar=2"
%>
现在这些情况:
<%=str%>
# output:http://domain.com/?foo=1&bar=2
<%=str.html_safe%>
# output:http://domain.com/?foo=1&bar=2
<%="#{str.html_safe}"%>
# output:http://domain.com/?foo=1&bar=2
<%=""+str.html_safe%>
# output:http://domain.com/?foo=1&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&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/
我是一名优秀的程序员,十分优秀!