C#替换Html字符串中的表情符号

时间:2015-09-02 19:27:22

标签: c# replace indexof emoticons

我有以下方法用C#

替换字符串中的表情符号
    public static string Emotify(string inputText)
    {
        var emoticonFolder = EmoticonFolder;
        var emoticons = new Hashtable(100)
        {
            {":)", "facebook-smiley-face-for-comments.png"},
            {":D", "big-smile-emoticon-for-facebook.png"},
            {":(", "facebook-frown-emoticon.png"},
            {":'(", "facebook-cry-emoticon-crying-symbol.png"},
            {":P", "facebook-tongue-out-emoticon.png"},
            {"O:)", "angel-emoticon.png"},
            {"3:)", "devil-emoticon.png"},
            {":/", "unsure-emoticon.png"},
            {">:O", "angry-emoticon.png"},
            {":O", "surprised-emoticon.png"},
            {"-_-", "squinting-emoticon.png"},
            {":*", "kiss-emoticon.png"},
            {"^_^", "kiki-emoticon.png"},
            {">:(", "grumpy-emoticon.png"},
            {":v", "pacman-emoticon.png"},
            {":3", "curly-lips-emoticon.png"},
            {"o.O", "confused-emoticon-wtf-symbol-for-facebook.png"},
            {";)", "wink-emoticon.png"},
            {"8-)", "glasses-emoticon.png"},
            {"8| B|", "sunglasses-emoticon.png"}
        };

        var sb = new StringBuilder(inputText.Length);

        for (var i = 0; i < inputText.Length; i++)
        {
            var strEmote = string.Empty;
            foreach (string emote in emoticons.Keys)
            {
                if (inputText.Length - i >= emote.Length && emote.Equals(inputText.Substring(i, emote.Length), StringComparison.InvariantCultureIgnoreCase))
                {
                    strEmote = emote;
                    break;
                }
            }

            if (strEmote.Length != 0)
            {
                sb.AppendFormat("<img src=\"{0}{1}\" alt=\"\" class=\"emoticon\" />", emoticonFolder, emoticons[strEmote]);
                i += strEmote.Length - 1;
            }
            else
            {
                sb.Append(inputText[i]);
            }
        }
        return sb.ToString();
    }

效果很好,似乎&#39;很快,但我意识到Html有点问题。

由于..

,此方法会破坏页面中包含链接的页面
:/

表情图标。它打破了

http:// 

将图像粘在中间。我试图找出一种方法来调整此方法以考虑链接并忽略它们 - 但不会牺牲性能。

非常感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:-1)

HTML敏捷包和正则表达式将成为您的朋友。你可以有一个装饰器,你的装饰品建立了src?我们可以有一个导致问题的src示例吗? :)