VOID CStringFilter::ReplaceToSign_Normal(const STRING& strIn, STRING& strOut) { static STRING strSign = "?"; static BYTE byANSIBegin = 0X20; static BYTE byANSIEnd = 0X80; strOut = strIn; STRING::size_type allsize = m_vIncluce.size(); //包含替换 for(STRING::size_type i = 0; i < m_vIncluce.size(); ++i) { STRING::size_type pos = strIn.find(m_vIncluce[i]); while(STRING::npos != pos) { STRING strReplace = ""; STRING::size_type len = m_vIncluce[i].size(); //如果包含替换的是1个字节的ANSI字节,替换前, //需要确认前一个字节一定不是双字节字符集的前一个字节 BOOL bSkip = FALSE; if(1 == len && pos > 0) { BYTE byChar = strIn[pos-1]; #if 0 char dbgmsg[256]; _snprintf(dbgmsg, 255, "strIn[pos-1]:0x%X(0x%X)\n", strIn[pos-1],byChar); ::OutputDebugString(dbgmsg); #endif //不是标准ANSI英文字符 if(!(byChar >= byANSIBegin && byChar <= byANSIEnd || byChar == '\r' || byChar == '\n' || byChar == '\t')) { bSkip = TRUE; } } if(!bSkip) { for(STRING::size_type k = 0; k < len; ++k, strReplace += strSign); strOut.replace(pos, len, strReplace); } pos = strIn.find(m_vIncluce[i], pos+len); } } //完全匹配替换 if(IsFullCmp(strIn)) { STRING::size_type len = strIn.size(); strOut.clear(); for(STRING::size_type i = 0; i < len; ++i, strOut += strSign); } }
VOID CStringFilter::ReplaceToSign_New(const STRING& strIn, STRING& strOut) { static STRING strSign = "~$%^&(){}`-_+=?,.<>"; strOut = strIn; STRING::size_type allsize = m_vIncluce.size(); //包含替换 for(STRING::size_type i = 0; i < m_vIncluce.size(); ++i) { STRING::size_type pos = strIn.find(m_vIncluce[i]); while(STRING::npos != pos) { STRING strReplace = ""; STRING::size_type len = m_vIncluce[i].size(); for(STRING::size_type k = 0; k < len; ++k) { STRING::size_type ri = rand()%int(strSign.size()); strReplace += strSign.at(ri); } strOut.replace(pos, len, strReplace); pos = strIn.find(m_vIncluce[i], pos+len); } } //完全匹配替换 if(IsFullCmp(strIn)) { STRING::size_type len = strIn.size(); strOut.clear(); for(STRING::size_type i = 0; i < len; ++i) { STRING::size_type ri = rand()%int(strSign.size()); strOut += strSign.at(ri); } } }
/** * string replace function * @param string str need op string * @param string old_str need replace old string * @param string new_str need replace to new string */ STRING CCUtil::StrReplace( STRING str, STRING search_str, STRING replace_str ) { STRING::size_type pos = 0 ; while( ( pos = str.find( search_str, pos ) ) != STRING::npos ) { str.replace( pos, search_str.size(), replace_str ) ; pos++ ; } return str ; }