mga*_*mga 5 ruby ruby-on-rails ruby-on-rails-3
考虑一下:
<%
str = "http://domain.com/?foo=1&bar=2"
%>
Run Code Online (Sandbox Code Playgroud)
现在这些情况:
<%=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
Run Code Online (Sandbox Code Playgroud)
我需要输出其他字符串的URL.我怎样才能保证&符号不被转义?由于我无法控制的原因,我无法发送&.
请帮忙!拉我的头发在这里:
编辑:澄清一下,我实际上有一个像这样的数组:
@images = [{:id=>"fooid",:url=>"http://domain.com/?foo=1&bar=2"},...]
Run Code Online (Sandbox Code Playgroud)
我正在创建一个JS数组(image_arrayvar)以这种方式在我的应用程序中使用:
image_array.push(<%=@images.map{|x|"{id:'#{x[:id]}',url:'#{x[:url].html_safe}'}"}.join(",")%>);
Run Code Online (Sandbox Code Playgroud)
这会产生:
image_array.push({id:'fooid',url:'http://domain.com/?foo=1&bar=2'},...);
Run Code Online (Sandbox Code Playgroud)
哪个在我的具体情况下不起作用.我需要url没有amp;部分.
当你写:
"#{foo.bar}"
Run Code Online (Sandbox Code Playgroud)
这相当于写作
foo.bar.to_s
Run Code Online (Sandbox Code Playgroud)
所以你实际做的是:
<%=str.html_safe.to_s%>
Run Code Online (Sandbox Code Playgroud)
... Rails不再认为是安全的,所以它通过一轮HTML转义命中你的结果字符串.
我不知道Rails的内部,但我假设该html_safe方法使用实例变量扩展字符串对象,将其标记为OK,但是当您通过插值将其包装在另一个字符串中时,您将获得一个没有该标志的新字符串.
编辑:要满足您的需求,请使用raw或调用html_safe最终字符串:
<%=raw "foo#{str}"%>
<%="foo#{str}".html_safe%>
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
image_array.push(<%=raw @images.map{…}.join(',')%>);
image_array.push(<%=@images.map{…}.join(',').html_safe%>);
Run Code Online (Sandbox Code Playgroud)
另见这个问题.
| 归档时间: |
|
| 查看次数: |
2775 次 |
| 最近记录: |