public void AppendWord(string word, WordFilterStatus wordFilterStatus, string replaceChar) { AppendWord(new WordEntity() { Word = word, WordFilterStatus = wordFilterStatus, Replacement = replaceChar }); }
private bool FilterSensitiveWord(ModelBindingContext bindingContext, string inputText, out string outputText) { WordFilterStatus status = WordFilterStatus.Banned; outputText = WordFilter.SensitiveWordFilter.Filter(inputText, out status); if (status == WordFilterStatus.Banned) { bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!"); return(true); } return(false); }
/// <summary> /// 内容过滤 /// </summary> /// <param name="body">待过滤内容</param> /// <param name="isBanned">是否禁止提交</param> public static string TextFilter(string body, out bool isBanned) { isBanned = false; if (string.IsNullOrEmpty(body)) { return(body); } string temBody = body; WordFilterStatus staus = WordFilterStatus.Replace; temBody = WordFilter.SensitiveWordFilter.Filter(body, out staus); if (staus == WordFilterStatus.Banned) { isBanned = true; return(body); } body = temBody; return(body); }
/// <summary> /// 使用正则过滤敏感词 /// </summary> /// <param name="source">待处理字符串</param> /// <param name="status">字符处理状态</param> private string RegexFilter(string source, out WordFilterStatus status) { string replaceStr = source; status = WordFilterStatus.Replace; foreach (var word in _regexWords) { if (Regex.IsMatch(replaceStr, word.Word)) { if (word.WordFilterStatus == WordFilterStatus.Banned) { status = word.WordFilterStatus; return(source); } replaceStr = Regex.Replace(replaceStr, word.Word, word.Replacement); } } status = WordFilterStatus.Replace; return(replaceStr); }
/// <summary> /// 转换为Message用于数据库存储 /// </summary> public Message AsMessage() { #region 对内容和标题的相关处理 WordFilterStatus status = WordFilterStatus.Replace; string newBody = WordFilter.SensitiveWordFilter.Filter(this.Body, out status); newBody = HtmlUtility.CleanHtml(this.Body, TrustedHtmlLevel.Basic); #endregion Message message = Message.New(); message.Subject = this.Subject; message.Body = this.Body; message.IsRead = false; IUser user = UserContext.CurrentUser; if (user != null) { message.Sender = user.DisplayName; message.SenderUserId = user.UserId; } return(message); }
/// <summary> /// 内容过滤 /// </summary> /// <param name="body">待过滤内容</param> /// <param name="isBanned">是否禁止提交</param> private string TextFilter(string body, out bool isBanned) { isBanned = false; if (string.IsNullOrEmpty(body)) { return(body); } string temBody = body; WordFilterStatus staus = WordFilterStatus.Replace; temBody = WordFilter.SensitiveWordFilter.Filter(body, out staus); if (staus == WordFilterStatus.Banned) { isBanned = true; return(body); } body = temBody; HtmlUtility.CleanHtml(body, TrustedHtmlLevel.Basic); return(body); }
public ActionResult _AddSensitiveWord(SensitiveWordEditModel model, WordFilterStatus select) { if (select.EnumMetadataDisplay() == WordFilterStatus.Banned.EnumMetadataDisplay()) { model.Replacement = "{Banned}"; } if (model.Id == 0 || model.Id == null) { string[] words = model.Word.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var word in words) { model.Word = word; int judge = sensitiveWordService.Create(model.AsSensitiveWord()); if (judge == -1) return Json(new StatusMessageData(StatusMessageType.Error, "有重名的敏感词!")); } return Json(new StatusMessageData(StatusMessageType.Success, "添加成功!")); } else { int judge = sensitiveWordService.Update(model.AsSensitiveWord()); if (judge == -1) return Json(new StatusMessageData(StatusMessageType.Error, "敏感词不能同名,编辑失败!")); return Json(new StatusMessageData(StatusMessageType.Success, "编辑成功!")); } }
/// <summary> /// 使用正则过滤敏感词 /// </summary> /// <param name="source">待处理字符串</param> /// <param name="status">字符处理状态</param> private string RegexFilter(string source, out WordFilterStatus status) { string replaceStr = source; status = WordFilterStatus.Replace; foreach (var word in _regexWords) { if (Regex.IsMatch(replaceStr, word.Word)) { if (word.WordFilterStatus == WordFilterStatus.Banned) { status = word.WordFilterStatus; return source; } replaceStr = Regex.Replace(replaceStr, word.Word, word.Replacement); } } status = WordFilterStatus.Replace; return replaceStr; }
/// <summary> /// 测试字符串是否出现屏蔽字 /// </summary> /// <param name="source">需要处理的字符串</param> /// <param name="status">敏感词处理状态</param> /// <returns>最终处理方式</returns> public string Filter(string source, out WordFilterStatus status) { status = WordFilterStatus.Replace; if (string.IsNullOrEmpty(source)) return source; StringBuilder sb = new StringBuilder(); for (int start = 0; start < source.Length; start++) { WordGroup wordGroup = _wordTable[FastToLower(source[start])]; if (wordGroup != null) { bool found = false; for (int idx = 0; idx < wordGroup.Count; idx++) { WordEntity we = wordGroup.GetItem(idx); int matchLength = 0; if (we.Word.Length == 0 || CheckString(source, we.Word, start + 1, out matchLength)) { if (we.WordFilterStatus == WordFilterStatus.Banned) { status = we.WordFilterStatus; break; } found = true; sb.Append(we.Replacement); start += matchLength; } } if (status == WordFilterStatus.Banned) break; if (!found) { sb.Append(source[start]); found = false; } } else { sb.Append(source[start]); } } if (status == WordFilterStatus.Replace) { source = sb.ToString(); source = RegexFilter(source, out status); } return source; }
/// <summary> /// 测试字符串是否出现屏蔽字 /// </summary> /// <param name="source">需要处理的字符串</param> /// <param name="status">敏感词处理状态</param> /// <returns>最终处理方式</returns> public string Filter(string source, out WordFilterStatus status) { status = WordFilterStatus.Replace; if (String.IsNullOrEmpty(source)) { return(source); } StringBuilder sb = new StringBuilder(); for (int start = 0; start < source.Length; start++) { WordGroup wordGroup = _wordTable[FastToLower(source[start])]; if (wordGroup != null) { bool found = false; for (int idx = 0; idx < wordGroup.Count; idx++) { WordEntity we = wordGroup.GetItem(idx); int matchLength = 0; if (we.Word.Length == 0 || CheckString(source, we.Word, start + 1, out matchLength)) { if (we.WordFilterStatus == WordFilterStatus.Banned) { status = we.WordFilterStatus; break; } found = true; sb.Append(we.Replacement); start += matchLength; } } if (status == WordFilterStatus.Banned) { break; } if (!found) { sb.Append(source[start]); found = false; } } else { sb.Append(source[start]); } } if (status == WordFilterStatus.Replace) { source = sb.ToString(); source = RegexFilter(source, out status); } return(source); }
/// <summary> /// 测试字符串是否出现屏蔽字 /// </summary> /// <param name="source">需要处理的字符串</param> /// <returns>最终处理方式</returns> public string Filter(string source) { WordFilterStatus status = WordFilterStatus.Replace; return(Filter(source, out status)); }
public void AppendWord(string word, WordFilterStatus wordFilterStatus, string replaceChar) { AppendWord(new WordEntity() { Word = word, WordFilterStatus = wordFilterStatus, Replacement = replaceChar }); }
/// <summary> /// /// </summary> /// <param name="controllerContext"></param> /// <param name="bindingContext"></param> /// <returns></returns> public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var value = base.BindModel(controllerContext, bindingContext); if (value == null) { return(value); } if (controllerContext.RouteData.Values.ContainsKey(bindingContext.ModelName)) { return(value); } string[] tempArray = null; if (bindingContext.ModelType.FullName.Contains("System.String") && value is Array) { tempArray = (string[])value; } //内容过滤 if ((tempArray != null && tempArray.Length > 0) || value is string && !string.IsNullOrEmpty(value as string)) { if (controllerContext.Controller.ValueProvider.ContainsPrefix(bindingContext.ModelName) || bindingContext.ModelMetadata.ContainerType != null) { //处理敏感词 WordFilterStatus status = WordFilterStatus.Banned; if (tempArray != null && tempArray.Length > 0) { for (int i = 0; i < tempArray.Length; i++) { tempArray[i] = WordFilter.SensitiveWordFilter.Filter(tempArray[i], out status); if (status == WordFilterStatus.Banned) { bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!"); break; } } return(tempArray); } string tempValue = (value as string).Trim(); Type type = bindingContext.ModelMetadata.ContainerType; PropertyInfo propertyInfo = null; if (type != null) { propertyInfo = type.GetProperty(bindingContext.ModelName); } var noFilterWordAttribute = propertyInfo != null?Attribute.GetCustomAttribute(propertyInfo, typeof(NoFilterWordAttribute)) as NoFilterWordAttribute : null; if (noFilterWordAttribute == null) { tempValue = WordFilter.SensitiveWordFilter.Filter(tempValue, out status); if (status == WordFilterStatus.Banned) { bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!"); return(tempValue); } } if (propertyInfo != null) { var dataTypeAttribute = Attribute.GetCustomAttribute(propertyInfo, typeof(DataTypeAttribute)) as DataTypeAttribute; if (dataTypeAttribute != null) { if (dataTypeAttribute.DataType == DataType.MultilineText) { //处理多行纯文本 tempValue = Formatter.FormatMultiLinePlainTextForStorage(tempValue, false); } else if (dataTypeAttribute.DataType == DataType.Html) { //处理html标签 tempValue = HtmlUtility.CleanHtml(tempValue, TrustedHtmlLevel.HtmlEditor); } } } return(tempValue); } } return(value); }