繁体   English   中英

用C#中的图像替换文本

[英]replacing a text by an image in 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);
    }
}

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

您假设Replace修改了现有的*字符串。 没有。 它返回一个新的字符串,并进行了修改。 它必须这样做,因为.NET中字符串是不可变的。 可能希望更改字符串的所有字符串操作( SubstringToUpper等)实际上都返回一个新Substring

因此,您的所有通话都是这样的:

msg.Replace(...);

应该可能是:

msg = msg.Replace(...);

应该开始使用参数化的SQL,而不是将所有值直接放入SQL查询中。 这将使您的代码更具可读性,避免SQL注入攻击 ,并消除许多数据类型转换问题。

另外,我会在每个if语句上使用大括号,然后将语句放在单独的行上:

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

哦,由于if / else语句,目前您只能在msg进行组替换。 您真的不想替换:-(如果您已经替换了:-)吗? 真的没有必要先进行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'/> ");

简单得多。

调用string.Replace实际上并不会更改字符串,因此您需要重新分配它:

msg = msg.Replace( ... );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM