EscapeUtils.cs 3.0 KB

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