EscapeUtils.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System.Text.RegularExpressions;
  2. namespace MeloongCore;
  3. public static class EscapeUtils {
  4. /// <summary>
  5. /// XML 转义。
  6. /// </summary>
  7. public static string? XmlEscape(string? str) {
  8. if (str is null) return null;
  9. if (str.StartsWithF("{")) str = "{}" + str; // #4187
  10. return str
  11. .Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("'", "&apos;")
  12. .Replace("\"", "&quot;").ReplaceLineEndings("&#xa;");
  13. }
  14. /// <summary>
  15. /// VB.NET 的 Like 关键字转义。
  16. /// </summary>
  17. public static string LikePatternEscape(string input) {
  18. var builder = new StringBuilder();
  19. foreach (char c in input) {
  20. if (c is '[' or ']' or '*' or '?' or '#') {
  21. builder.Append('[').Append(c).Append(']');
  22. } else {
  23. builder.Append(c);
  24. }
  25. }
  26. return builder.ToString();
  27. }
  28. /// <summary>
  29. /// 正则表达式转义。等同于 Regex.Escape。
  30. /// </summary>
  31. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  32. public static string? RegexEscape(string? value) => Regex.Escape(value);
  33. /// <summary>
  34. /// 正则表达式去转义。等同于 Regex.Unescape。
  35. /// </summary>
  36. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  37. public static string? RegexUnescape(string? value) => Regex.Unescape(value);
  38. /// <summary>
  39. /// URL 转义。等同于 Uri.EscapeDataString。
  40. /// </summary>
  41. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  42. public static string? UrlEscape(string? value) => Uri.EscapeDataString(value);
  43. /// <summary>
  44. /// URL 去转义。等同于 Uri.UnescapeDataString。
  45. /// </summary>
  46. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  47. public static string? UrlUnescape(string? value) => Uri.UnescapeDataString(value);
  48. /// <summary>
  49. /// 表单转义。等同于 WebUtility.UrlEncode。
  50. /// </summary>
  51. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  52. public static string? FormUrlEscape(string? value) => WebUtility.UrlEncode(value);
  53. /// <summary>
  54. /// 表单去转义。等同于 WebUtility.UrlDecode。
  55. /// </summary>
  56. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  57. public static string? FormUrlUnescape(string? value) => WebUtility.UrlDecode(value);
  58. /// <summary>
  59. /// HTML 转义。等同于 WebUtility.HtmlEncode。
  60. /// </summary>
  61. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  62. public static string? HtmlEscape(string? value) => WebUtility.HtmlEncode(value);
  63. /// <summary>
  64. /// HTML 去转义。等同于 WebUtility.HtmlDecode。
  65. /// </summary>
  66. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  67. public static string? HtmlUnescape(string? value) => WebUtility.HtmlDecode(value);
  68. }