c#
  • asp.net
  • 2013-03-11 67 views 1 likes 
    1

    这是我的代码:在C#替换文本由图像

    [WebMethod] 
    public static void SendChatMessage(string msg, int ToClient) 
    { 
        if (msg != null && ToClient != 0) 
        { 
         if (msg.Contains(":-)")) msg.Replace(":-)", "<img src='Styles/emojie/smile.png' /> "); 
         else if (msg.Contains(":-(")) msg.Replace(":-(", "<img src='Styles/emojie/sad.png' /> "); 
         else if (msg.Contains(":'-(")) msg.Replace(":'-(", "<img src='Styles/emojie/cry.png' /> "); 
         else if (msg.Contains(":-$")) msg.Replace(":-$", "<img src='Styles/emojie/shy.png' /> "); 
         int FromClientID = Convert.ToInt32(HttpContext.Current.Session["ClientID"]); 
         string query = "insert into chat (FROM_CLIENT,TO_CLIENT,CHAT_MSG) values (" + FromClientID + "," + ToClient + ",'" + msg + "')"; 
         new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).Insert(query); 
        } 
    } 
    

    味精被发送到数据库,因为它是在它没有被取代什么,我做错了什么?

    +0

    也,又一想:我会读出的数据库之后完成替换操作,不写之前它。使用上述方法,例如,当网址更改时,您可能会遇到问题。或者你想实现一个新的客户端,而不是在浏览器中运行(甚至不使用html作为标记)。此外,如果您现在添加新的表情符号,则只会应用于未来的消息,而不会应用于过去的消息。 只是一个想法,但你的问题的答案是完全详细说明由jon双向飞碟(什么是荣誉:D) – 2013-03-12 09:20:44

    回答

    9

    你假设Replace修改了现有的*字符串。它没有。它返回一个新的字符串,并进行修改。它必须,因为字符串在.NET中是不可变的。 全部可能希望更改字符串(Substring, ToUpper等)的字符串操作实际上会返回一个新字符串。

    您的通话这样的所以一切:

    msg.Replace(...); 
    

    也许应该是:

    msg = msg.Replace(...); 
    

    你应该开始使用参数化的SQL,而不是直接把所有的值到SQL查询。这将使您的代码更具可读性,避免SQL injection attacks,并消除大量数据类型转换问题。

    此外,我会用括号每if声明,并把语句在单独的行:

    if (msg.Contains(":-)")) 
    { 
        msg = msg.Replace(":-)", "<img src='Styles/emojie/smile.png' /> "); 
    } 
    

    哦,现在你只让一个一套替换的msgif/else声明。如果您已经更换:-),您是否真的不想更换:-(?真的没有必要使Contains首先检查......我刚刚链一起呼吁无条件:

    msg = msg.Replace(":-)", "<img src='Styles/emojie/smile.png'/> ") 
         .Replace(":-(", "<img src='Styles/emojie/sad.png'/> ") 
         .Replace(":'-(", "<img src='Styles/emojie/cry.png'/> ") 
         .Replace(":-$", "<img src='Styles/emojie/shy.png'/> "); 
    

    简单得多。

    +0

    因此,如果我的味精是'例子:-)'这将是更换后'例如'? – Sora 2013-03-11 14:48:05

    +0

    谢谢你的回复:) – Sora 2013-03-11 14:52:57

    1

    调用string.Replace实际上并没有改变字符串,因此你需要重新分配它:

    msg = msg.Replace(...); 
    
    相关问题