CStr ReplaceStrI(CStr in, CStr from, CStr to) { char *p; int fl = from.Length(), tl = to.Length(), il = in.Length(); if (fl <= 0 || fl > il) return in; if (fl == tl) { char *i = in.SafeP(); char *b = i; while ((p = stristr(i, (il-(i-b)), from, fl))) { memcpy(p, to.Data(), tl); i = p + fl; } return in; } else { CStr res; char *i = in.SafeP(); while ((p = stristr(i, il-(i-in.Data()), from, fl))) { res.Append(i, p - i); if (tl > 0) res << to; i = p + fl; } if (i != in.Data()) { res.Append(i, il - (i - in.Data())); return res; } else { return in; } } }