using System; using System.Text; namespace FairyGUI.Utils { /// /// /// public class XMLUtils { public static string DecodeString(string aSource) { int len = aSource.Length; StringBuilder sb = new StringBuilder(); int pos1 = 0, pos2 = 0; while (true) { pos2 = aSource.IndexOf('&', pos1); if (pos2 == -1) { sb.Append(aSource.Substring(pos1)); break; } sb.Append(aSource.Substring(pos1, pos2 - pos1)); pos1 = pos2 + 1; pos2 = pos1; int end = Math.Min(len, pos2 + 10); for (; pos2 < end; pos2++) { if (aSource[pos2] == ';') break; } if (pos2 < end && pos2 > pos1) { string entity = aSource.Substring(pos1, pos2 - pos1); int u = 0; if (entity[0] == '#') { if (entity.Length > 1) { if (entity[1] == 'x') u = Convert.ToInt16(entity.Substring(2), 16); else u = Convert.ToInt16(entity.Substring(1)); sb.Append((char)u); pos1 = pos2 + 1; } else sb.Append('&'); } else { switch (entity) { case "amp": u = 38; break; case "apos": u = 39; break; case "gt": u = 62; break; case "lt": u = 60; break; case "nbsp": u = 32; break; case "quot": u = 34; break; } if (u > 0) { sb.Append((char)u); pos1 = pos2 + 1; } else sb.Append('&'); } } else { sb.Append('&'); } } return sb.ToString(); } public static string EncodeString(string str) { if (str == null || str.Length == 0) return ""; else return str.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'", "'"); } } }