Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RubyonRails:如何将字符串呈现为HTML?_Html_Ruby On Rails_Ruby_String - Fatal编程技术网

RubyonRails:如何将字符串呈现为HTML?

RubyonRails:如何将字符串呈现为HTML?,html,ruby-on-rails,ruby,string,Html,Ruby On Rails,Ruby,String,我有 @str=“你好” 雇员再培训局认为: @str = "<b>Hi</b>" 当我真正想要的是Hi时,页面上将显示:Hi。ruby如何将字符串“解释”为HTML标记 编辑:以下情况 <%= @str %> @str=“你好” 如果在我看来是这样的话 @str = "<span class=\"classname\">hello</span>" HTML源代码是hello,我真正想要的是hello(没有转义双引号

我有

@str=“你好”
雇员再培训局认为:

@str = "<b>Hi</b>"

当我真正想要的是Hi时,页面上将显示:
Hi
。ruby如何将字符串“解释”为HTML标记


编辑:以下情况

<%= @str %>
@str=“你好”
如果在我看来是这样的话

@str = "<span class=\"classname\">hello</span>"


HTML源代码是
hello,我真正想要的是
hello
(没有转义双引号的反斜杠)。“取消”这些双引号的最佳方式是什么?

您正在将业务逻辑与内容混合在一起。相反,我建议将数据发送到您的页面,然后使用JQuery之类的工具将数据放在需要的地方

这样做的好处是将所有HTML都保存在它所属的HTML页面中,这样您的web设计人员就可以在以后修改HTML,而不必使用服务器端代码

或者,如果您不想使用JavaScript,可以尝试以下方法:

<%raw @str %>
@str=“你好”
至少这样,您的HTML就会出现在它所属的HTML页面中。

使用:



但是,正如@ JMist253正确地说,考虑HTML真正属于什么地方。

< P>因为你正在翻译,并且从一个人的蹩脚编码文件中挑选出你想要的代码,你可以使用Cordon标签,和你的正则表达式的

组合。 从api文档中窃取,您可以将翻译后的代码插入到
内容\u标记中,如:

<%=raw @str >
“#{translated_class}”do-%>
#=>你好,世界!
由于不了解您的代码,这种想法将确保您翻译的代码过于兼容。

UPDATE 出于安全原因,建议使用而不是

@str=“你好”

使用
raw
很好,但它所做的只是将字符串转换为字符串,然后调用
html\u-safe
。当我知道我有一个字符串时,我更喜欢直接调用
html\u-safe
,因为它跳过了不必要的步骤,使发生的事情更清楚。有关字符串转义和XSS保护的详细信息,请参阅。

您还可以使用
简单_格式(@str)
删除恶意代码。请在此处阅读更多信息:

或者您可以尝试CGI.unescapethtml方法

@str = "<b>Hi</b>"
<%= @str.html_safe %>
CGI.unescapeHTML“p这是一个段落。/p”
=>“这是一段。

@str=“你好”
如果在我看来是这样的话

@str = "<span class=\"classname\">hello</span>"
HTML源代码是
hello
,我真正想要的是
hello
(没有转义双引号的反斜杠)。什么是最好的方式来“取消”这些双引号

解决方案:在单引号内使用双引号(或在双引号内使用单引号),以避免使用反斜杠转义

CGI.unescapeHTML "&lt;p&gt;This is a Paragraph.&lt;/p&gt;"
=> "<p>This is a Paragraph.</p>"
@str='hello'

如果你在
轨道上,最酷的方法是

@str = '<span class="classname">hello</span>'
<%raw @str %>


注意双等号。有关更多信息,请参阅相关问题。

html\u安全版在Rails 4中运行良好

<%== @str >


问题是,我的应用程序接收了一个标记不好的文件,并通过正则表达式将其“翻译”为良好的HTML标记以发送到视图。因此,正在生成的HTML标记是动态的,因此我无法事先知道应该围绕@str的是哪些标记。如果不是在模型中,我将在哪里执行这种“翻译”工作?我认为我们不应该在视图中有广泛的逻辑代码。这实际上是一个意见问题。当开发一个新的应用程序时,我更喜欢尽可能保持一切清洁。但我们常常必须在别人留给我们的约束下工作。如果您的数据源返回HTML标记,那么不妨看看Michael Stum的解决方案中所述的使用“raw”。如果您继承了对某些代码的支持,并且代码中存在思维或设计欠佳的区域,那么清理它以提高可维护性确实是您的一部分责任。当它是一个很好的代码开始时,让它按您发现的方式运行是很好的,但是当它需要工作时,让它比您发现的更好是很好的。我的部分工作是管理一些遗留应用程序;我是一个不修复那些没有损坏的东西的粉丝,但是因为它们是如何编写的,所以它们不容易被增强。我不得不重写大部分函数调用,但现在使用起来容易多了。如果没有其他理由使用JS,就不应该在HTML插值中使用JavaScript。这将破坏非JS浏览器的网站(是的,有一些)。当然,如果你允许非转义内容,确保非邪恶标记的责任取决于你。嗨,这个解决方案有效,除了一个警告:请看编辑的问题我假设翻译的文本是div中的实际内容,对吗?例如,在这个例子中,应该是“Hello world!”?如果翻译的文本中有更多的HTML,比如嵌套的div或span,该怎么办?我会多次打电话给内容标签吗?还有。。。对不起,请提早进入。。。内部的每个嵌套div/span仍然是一个content_标记,您仍然需要验证它,对吗?因为我们看不到你的翻译技巧;-),我假设您查找所有标记,而不管正则表达式是否位于html的“父项”上。。。例如
    。你不会把所有的李都当作一根大绳子来打印吧?每一个都是它自己的内容标签:李,文本正确吗?太棒了。我找了一个小时也找不到该怎么做。谢谢你的回答。我一直使用
    raw
    。很高兴知道这件事!根据将来你可以考虑使用%Q[]语法来跳过字符串。e、 g
    %Q[“引号”]=>“引号”
    来源:不知道这是否有帮助。
    CGI.unescapeHTML "&lt;p&gt;This is a Paragraph.&lt;/p&gt;"
    => "<p>This is a Paragraph.</p>"
    
    @str = '<span class="classname">hello</span>'
    <%raw @str %>
    
    <%== @str >
    
    <%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
    >