/// <summary> /// 用于StringHelper类从字符串中挑选符合条件的数字、字母、中文、全角字符, 选项可以叠加使用,如 StringFilterOptions.HoldLetter|StringFilterOptions.HoldNumber 表示从字符串中选取字母和数字 /// </summary> /// <param name="str"></param> /// <param name="options"></param> /// <returns></returns> public static string FilterInvalidChar(string str, StringFilterOptions options) { if (string.IsNullOrEmpty(str)) { return(string.Empty); } StringBuilder builder = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { int num2 = str[i]; if (((num2 >= 0x30) && (num2 <= 0x39)) && ((StringFilterOptions.HoldNumber & options) == StringFilterOptions.HoldNumber)) { builder.Append(str[i]); } else if ((((num2 >= 0x41) && (num2 <= 90)) || ((num2 >= 0x61) && (num2 <= 0x7a))) && ((StringFilterOptions.HoldLetter & options) == StringFilterOptions.HoldLetter)) { builder.Append(str[i]); } else if (((num2 >= 0x4e00) && (num2 <= 0x9fa5)) && ((StringFilterOptions.HoldChinese & options) == StringFilterOptions.HoldChinese)) { builder.Append(str[i]); } else if (((((num2 >= 0xff10) && (num2 <= 0xff19)) || ((num2 >= 0xff21) && (num2 <= 0xff3a))) || ((num2 >= 0xff41) && (num2 <= 0xff5a))) && ((StringFilterOptions.SBCToDBC & options) == StringFilterOptions.SBCToDBC)) { builder.Append((char)(num2 - 0xfee0)); } } return(builder.ToString()); }
/// <summary> /// 得到输入字符串哈希值的长度 /// </summary> /// <param name="input"></param> /// <param name="options"></param> /// <returns></returns> public static decimal GetHashKey(string input, StringFilterOptions options) { ulong num; if (string.IsNullOrEmpty(input)) { return(0M); } input = FilterInvalidChar(input, options); var data = Encoding.UTF8.GetBytes(input); var encryData = Md5.Encrypt(data); num = BitConverter.ToUInt64(encryData, 4); return(DataConverter.CDecimal(num)); }
private static object AlterParameters(StringFilterOptions operation, object parameters) { if (operation == StringFilterOptions.StripTags) { // Convert the given tags to the format expected by strip_tags PhpArray tags = (parameters as PhpArray); if (tags != null) { StringBuilder sb = new StringBuilder(); foreach (object o in tags) { sb.Append('<'); sb.Append(Core.Convert.ObjectToString(o)); sb.Append('>'); } return sb.ToString(); } else { // The allowable_tags is expected to be a string return Core.Convert.ObjectToString(parameters); } } return parameters; }
/// <summary>Creates a new instance of this filter with additional parameters.</summary> public StringFilter(StringFilterOptions operation, object parameters) : base(AlterParameters(operation, parameters)) { this.operation = operation; }