Tho*_*ith 5 c# string-formatting
我想创建一个EscapingFormatProvider在返回格式化字符串之前自动转义 HTML 格式的字符串,除非格式参数以 ! 开头:
string.Format(new EscapingFormatProvider(), "<div>{0}</div>", "<script src='foo'></script>");
// => <div><script src='foo'></script></div>
string.Format(new EscapingFormatProvider(), "<div>{0:!}</div>", "<script src='foo'></script>");
// => <div><script src='foo'></script></div>
Run Code Online (Sandbox Code Playgroud)
我希望它传递格式参数,而不是 ! 如果有,则使用默认格式化程序。唯一的麻烦是,我不知道如何获得默认的格式化程序。我发现的所有示例都没有解决委托给默认格式化程序的问题。
编辑:这就是我想出的:
private class EscapingFormatProvider : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType) { return this; }
private string DefaultFormat(string format, object arg)
{
return string.Format("{0:" + format + "}", arg);
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
return (format.First() == '!')
? HttpUtility.HtmlEncode(DefaultFormat(format.Substring(1), arg))
: DefaultFormat(format, arg);
}
}
Run Code Online (Sandbox Code Playgroud)
这有点间接,但我认为它有效。
如果我理解正确,那么使用默认格式提供程序所需要做的就是调用不采用 IFormatProvider 的 string.Format 的重载!或者您所说的“默认格式化程序”还有其他含义,或者您担心本地化吗?
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |