如何忽略html标签中的撇号?

时间:2017-06-13 19:54:17

标签: html ruby

我确信有人会将此标记为重复的问题,但没有其他答案对我有用。

我正在使用ruby并将变量传递到我的html页面。假设我的变量“camp_name”等于“abc'd”

 <%=camp_name%>

这输出“abc'd”这就是我想要的。

 <input type="text" class="form-control" name="campaign_name" required value='<%=camp_name%>'>

由于单撇号,该字段中的值现在为“abc”。如何让它忽略撇号?感谢。

2 个答案:

答案 0 :(得分:0)

您可以将变量转义为html实体:

camp_name.gsub("'", "&apos;")

您也应该为其他字符执行此操作,因为正如评论所述,用户只需在您的页面中使用当前脚本插入HTML标记即可。可能最重要的是以下内容:

camp_name.gsub("<", "&lt;")
camp_name.gsub(">", "&gt;")

答案 1 :(得分:0)

如果你正在使用Rack(如果你正在使用Rails或Sinatra肯定会使用它,即使你没有使用它也可能就在那里),有一个用于转义的内置功能HTML就是这种事情。调用Rack::Utils#escape_html会将&符号,括号和引号替换为HTML实体(例如&apos;而不是')。

在您的情况下,您需要以下代码:

 <input type="text" class="form-control" name="campaign_name" required value='<%= Rack::Utils.escape_html(camp_name) %>'>

这将评估为:

<input type="text" class="form-control" name="campaign_name" required value='abc&apos;d'>

这是在HTML中显示撇号的正确方法。

正如旁注,显示用户提交的文本而不在网站上转义是一个非常坏主意,因为恶意用户可以添加任意Javascript,这可能会导致您的网站无用,添加广告,以及更多。您应该养成在显示之前转义用户可以提交的任何文本的习惯,可以通过手动gsub或使用这样的帮助方法。