字符数减去HTML字符C#

时间:2010-10-08 14:45:13

标签: c# truncate counting html

我正在试图找出一种方法来计算字符串中的字符数,截断字符串,然后返回它。但是,我需要此函数来不计算HTML标记。问题是,如果它计算HTML标记,那么如果截断点位于标记的中间,那么页面将显示为已损坏。

这就是我到目前为止......

public string Truncate(string input, int characterLimit, string currID) {
    string output = input;

    // Check if the string is longer than the allowed amount
    // otherwise do nothing
    if (output.Length > characterLimit && characterLimit > 0) {

        // cut the string down to the maximum number of characters
        output = output.Substring(0, characterLimit);

        // Check if the character right after the truncate point was a space
        // if not, we are in the middle of a word and need to remove the rest of it
        if (input.Substring(output.Length, 1) != " ") {
            int LastSpace = output.LastIndexOf(" ");

            // if we found a space then, cut back to that space
            if (LastSpace != -1)
            {
                output = output.Substring(0, LastSpace);
            }
        }
        // end any anchors
        if (output.Contains("<a href")) {
            output += "</a>";
        }
        // Finally, add the "..." and end the paragraph
        output += "<br /><br />...<a href='Announcements.aspx?ID=" + currID + "'>see more</a></p>";
    }
    return output;
}

但我对此并不满意。有一个更好的方法吗?如果你可以为此提供一个新的解决方案,或者可能就我到目前为止添加的内容提出建议,那就太好了。

免责声明:我从未使用过C#,所以我不熟悉与语言相关的概念......我这样做是因为我必须这样做,而不是选择。

谢谢, 赫里斯托斯

1 个答案:

答案 0 :(得分:3)

使用正确的工具解决问题。

HTML不是一种简单的解析格式。我建议您使用proven, existing parser而不是自己动手。如果你知道你只会解析XHTML - 那么你可以使用XML解析器。

这些是对HTML执行操作的唯一可靠方法,可以保留语义表示。

不要尝试使用正则表达式。 HTML不是一种常规语言,只会让你自己感到悲伤和痛苦。