「ネットゲームシールドワードの複雑なブレンド」のソリューションについて
プロジェクトは最近版署に版号を申請し始め、フィードバックの修正内容は、チャットシールドワードライブラリの複雑な混合がブロックできなかったことだ.例えば「abc」も「ABC」も遮蔽できるが、「AbC」のように「aBC」は遮蔽できない(簡体字の代わりに大文字と小文字).
インターネットで資料を調べてみると、最後の解決策は、送信文字をすべて簡体字に変換し、シールドワードライブラリの文字と比較することです.
コードは以下のように実現され、インタフェースはluaに使用される.
インターネットで資料を調べてみると、最後の解決策は、送信文字をすべて簡体字に変換し、シールドワードライブラリの文字と比較することです.
コードは以下のように実現され、インタフェースはluaに使用される.
static int luaA_simplify(lua_State *L)
{
size_t l;
std::wstring src = MByteToWChar(luaL_checklstring(L, 1, &l));
WORD wLanguageID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) ;
LCID Locale = MAKELCID( wLanguageID, SORT_CHINESE_PRC ) ;//0x0804
int len = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE, src.c_str(), -1, NULL, 0 );
wchar_t* pszGbs = new wchar_t[ len ];
LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE, src.c_str(), -1, pszGbs, len );
std::string des = WCharToMByte(pszGbs);
delete [] pszGbs;
tolua_pushstring(L, des.c_str());
return 1;
}