我将用户输入带入文本区域,存储并最终将其显示回用户.
在我的视图(剃刀)中我想做这样的事情......
@Message.Replace("\n", "</br>")
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为默认情况下Razor Html编码.这很棒,但我想换线.
如果我这样做,我会遇到XSS问题.
@Html.Raw(Message.Replace("\n", "</br>"))
Run Code Online (Sandbox Code Playgroud)
处理这种情况的正确方法是什么?
UPDATE Jade v0.24.0使用!=属性语法修复此问题.option(value!='<%= id %>')
我正在尝试<option>使用jade 构建一个,其中选项的值是UnderscoreJS模板标记:<%= id %>但我无法让它工作,因为jade将我的标记文本转换为<= id >.
这是我的Jade标记:
script(id="my-template", type="text/template")
select(id="type")
<% _.each(deviceTypes, function(type){ %>
option(value='<%= type.id %>') <%= type.name %>
<% }) %>
Run Code Online (Sandbox Code Playgroud)
我希望它能产生这个html:
<script id="my-template" type="text/template">
<select id='type'>
<% _.each(deviceTypes, function(type){ %>
<option value="<%= type.id %>"> <%= type.name %> </option>
<% }) %>
</select>
</script>
Run Code Online (Sandbox Code Playgroud)
但我得到的是这样的:
<script id="my-template" type="text/template">
<select id='type'>
<% _.each(deviceTypes, function(type){ %>
<option value="<%= type.id %>"> <%= type.name %> </option>
<% }) …Run Code Online (Sandbox Code Playgroud) 我发现Python和Javascript的类似问题和答案,但不适用于C#或任何其他WinRT兼容语言.
我认为我需要它的原因是因为我正在显示我从Windows 8商店应用程序中的网站获得的文本.比如é应该成为é.
或者,还有更好的方法?我没有显示网站或RSS订阅源,只是列出了网站及其标题.
我正在使用XML来共享HTML内容.AFAIK,我可以通过以下方式嵌入HTML:
编码:我不知道它是否完全安全使用.我将不得不再次解码它.
使用CDATA部分:如果内容包含结束标记"]]>"和某些十六进制字符,我仍然会遇到问题,我相信.另一方面,XML解析器将为我透明地提取信息.
我应该选择哪个选项?
更新:xml将在java中创建,并作为字符串传递给.net Web服务,它将被解析回来.因此,我需要能够将xml导出为字符串并使用"doc.LoadXml(xmlString);"加载它.
我不太确定这是如何工作的...试图找到文档.
在我现有的应用程序中,我有两种不同的方式在我的视图中呈现字符串
<%: model.something %>
<!-- or -->
<%= model.something %>
Run Code Online (Sandbox Code Playgroud)
第一个是html编码,第二个不是.
Razor有类似的东西吗?我只能找到这个,这是编码版本.
@model.something
Run Code Online (Sandbox Code Playgroud) 我当然熟悉这些java.net.URLEncoder和java.net.URLDecoder课程.但是,我只需要HTML风格的编码.(我不想' '替换'+'等).我不知道在类中构建的JDK只会进行HTML编码.有吗?我知道其他选择(例如,Jakarta Commons Lang'BtringEscapeUtils',但我不想在我需要它的项目中添加另一个外部依赖项.
我希望在最近的JDK(又名5或6)中添加了一些我不知道的JDK.否则我必须自己动手.
一直困扰我的简单问题.
我应该立即对用户输入进行HTML编码并将编码内容存储在数据库中,还是应该在显示时存储原始值和HTML编码?
存储编码数据可以大大降低开发人员在显示数据时忘记对数据进行编码的风险.但是,存储编码数据会使数据挖掘变得更加麻烦,并且会占用更多空间,即使这通常不是问题.
我将FCKEditor发出的HTML代码存储在数据库中,并希望将其显示(良好渲染)到视图上.因此,例如,存储为:
<>pre<>This is some sample text<>pre</>
Run Code Online (Sandbox Code Playgroud)
将以如下方式显示给用户:
This is some sample text
Run Code Online (Sandbox Code Playgroud)
(具有预格式化文本的适当样式)
视图已经具有要显示的必需字符串ViewData,我只是不确定向用户显示它的最佳方式是什么.
使用Razor View Engine,只要您将字符串直接输出到页面,它就是HTML编码的.例如:
@"<p>Hello World</p>"
Run Code Online (Sandbox Code Playgroud)
实际上将输出到页面:
<p>Hello World </p>
Run Code Online (Sandbox Code Playgroud)
哪个会在浏览器中显示为:
<p> Hello World </ p>
这里的问题是,在创建Html帮助程序时,到目前为止,使用旧的aspx视图引擎,我只返回一个字符串,并将其输出到浏览器:
<%= Html.MyCoolHelperMethod(); %>
Run Code Online (Sandbox Code Playgroud)
所以我的问题基本上就是这个.我这样做:
public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper)
{
return new helper.Raw("<p>Hello World</p>");
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以在我的cshtml中执行此操作:
@Html.MyCoolHelperMethod();
Run Code Online (Sandbox Code Playgroud)
或者我这样做:
public static string MyCoolHelperMethod(this HtmlHelper helper)
{
return "<p>Hello World</p>";
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我需要在我的cshtml中完成工作:
@Html.Raw(Html.MyCoolHelperMethod());
Run Code Online (Sandbox Code Playgroud)
显然,第一种方法使视图看起来更清晰,但我只是想知道普通模式是否实际上是帮助者返回IHtmlString并且我过去做错了.
我在asp.net mvc 3中有以下自定义html助手
public static string RegisterJS(this HtmlHelper helper, ScriptLibrary scriptLib)
{
return "<script type=\"text/javascript\"></script>\r\n";
}
Run Code Online (Sandbox Code Playgroud)
问题是结果是像这样得到html编码(我必须添加空格才能正确显示结果:
<script type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
这对我来说显然没什么帮助..我读过的任何内容都没有说明这一点......关于如何才能得到真实结果的任何想法?
html-encode ×10
asp.net-mvc ×3
html ×3
c# ×2
razor ×2
cdata ×1
java ×1
pug ×1
security ×1
templates ×1
viewengine ×1
xml ×1
xss ×1