string.replace每个'除了第一个和最后一个

时间:2013-03-01 03:46:04

标签: c# .net

我有一个项目,我在其中调用MySQL查询,该查询是根据我发送给方法的字符串构建的。

如果字符串只有一个引用'

,则会出现问题

我想用\'替换它,所以对MySQL来说是安全的

但是当我构建查询时,我在字符串的开头和结尾添加一个引号和%;例如'%texthere%'

所以我需要知道如何替换除第一个和最后一个之外的每一个引用?

所以它只会替换为:'%thi'stext%'

对此:'%thi\'stext'%

6 个答案:

答案 0 :(得分:4)

简单:

int first = s.IndexOf('\'');
int last = s.LastIndexOf('\'');
string prefix = s.Substring(0, first+1);
string query = s.Substring(first+1, last-first-1);
string suffix = s.Substring(last);
s = prefix + query.Replace("'", "\\'") + suffix;

当然,您应该确实使用SQL参数。

答案 1 :(得分:1)

我很蠢 我终于看了很多方法

我通过string.Replace("'", "\'")

修复了它

在我添加%& '到开头%&最后'

我从你们那里学到了很多,非常感谢

答案 2 :(得分:0)

首先使用trim函数从字符串的每一侧剪切单引号。然后将“'”替换为“\”,并将单引号添加回字符串的每一侧。如果'是字符串中的第一个或最后一个字符,因为它将被修剪,这将无效。

答案 3 :(得分:0)

我以前做过的方法如下:

  1. 使用IndexOf获取第一次出现的字符的索引。
  2. 从步骤1
  3. 中找到的索引处获取原始字符串的子字符串
  4. 撤消在步骤2中找到的子字符串
  5. 对步骤3中的反向字符串重复步骤1,现在您将看到一个子字符串,其中包含从第一个字符到最后一个字符之后的字符串。
  6. 再次反转步骤4中的子字符串(将其恢复为原始顺序)并将剩余的'字符替换为\'
  7. 使用(pseudoCode) -

    重建字符串

    finalString = string.Concat(     originalString.Substring(0,firstIndex),     replacedSubstringFromStep5,     originalString.Substring(secondIndex,originalStringLength - 1)

  8. 这将为您提供一个字符串,其中包含第一个'字符以及原始字符串中最后一个字符之后的任何内容,其间的所有内容都将是已替换的'现在为MySQL查询转义的字符。

    希望这有帮助!

    编辑:请注意,当我这样做时,它是用于链接应用程序中的字符串操作,而不是用于数据库查询。我同意最好使用存储过程和参数,正如其他人所说的那样;但是,我提供的解决方案,没有进入最佳实践等,将会做OP正在寻求的。

答案 4 :(得分:0)

Reffer bellow link

Strip double quotes from a string in .NET

Replace all double quotes withing String

希望这个人能帮到你 如果没有得到解决方案,请告诉我,我会给出另一种解决方案

修改 好吧,所以尝试这样的字符串并给予反馈

string query=@"%thi'stext%";

答案 5 :(得分:0)

我希望这种方法可以帮助您: 假设raw匹配模式“'%free text here here with single quotes%'”

    private string ReplaceSpecial(string raw)
    {
        return String.Format("'%{0}%'", raw.Substring(2, raw.Length - 2).Replace("'", "\\'"));
    }