Html.Encode()不编码空格

时间:2008-12-29 10:49:41

标签: asp.net-mvc encoding

在我的asp.net-mvc网站上,我有一个字段,通常有一个字符串(来自数据库),但可能不时包含任何内容。 因为IE不知道如何处理css“空单元”标签,所以空表格单元格需要填充&am​​p; nbsp;
我想

Html.Encode(" ");

会为我解决这个问题,但很明显,它只会返回“”。 我可以按如下方式实现这个逻辑

Html.Encode(theString).Equals(" ")?" ":Html.Encode(theString);

也是一种非速记 - 如果可能的话,但坦率地说,两种选择都很难看。 是否有更可读,更紧凑的方式将可选空间放在那里?

3 个答案:

答案 0 :(得分:5)

" "转换为"\xA0"然后无条件Html.Encode结果可能更简单:

s = (string.IsNullOrEmpty(s) || s.Trim()=="") ? "\xA0" : s;
Html.Encode(s);

十六进制00A0标识非中断空格的Unicode字符,这就是  的等效HTML实体的原因。

如果您对数据库有任何控制权,则可以将空或单空格字段转换为此"\xA0"值,这将完全消除该条件。

答案 1 :(得分:2)

HTML中的空格编码只是一个空间。可能看起来像一个空格,但具有不同的语义,“非破坏”意味着断行被抑制。

解决方案:每当我发现功能缺乏或出现意外行为时(例如asp:Label和HyperLink不进行HTML编码),我就会编写自己的实用程序类,就像我说的那样;)

public class MyHtml
{
    public static string Encode(string s)
    {
        if (string.IsNullOrEmpty(s) || s.Trim()=="")
            return "& nbsp;";
        return Html.Encode(s);
    }
}

答案 2 :(得分:0)

您必须找到一种不同的方式来填充空单元格。将空格字符HTML编码为自身是完全有效的。如果你需要它,你可以使用URL转义或滚动你自己的方法来生成内容。