public string Canonicalize(string input) { StringBuilder stringBuilder = new StringBuilder(); Encoder.EncodedStringReader encodedStringReader = new Encoder.EncodedStringReader(input); while (encodedStringReader.HasNext()) { Encoder.EncodedCharacter nextCharacter = encodedStringReader.NextCharacter; if (nextCharacter != null) { stringBuilder.Append(nextCharacter.Unencoded); } } return(stringBuilder.ToString()); }
private string EntityEncode(string input, char[] baseChars, char[] immune) { StringBuilder stringBuilder = new StringBuilder(); Encoder.EncodedStringReader encodedStringReader = new Encoder.EncodedStringReader(input); while (encodedStringReader.HasNext()) { Encoder.EncodedCharacter nextCharacter = encodedStringReader.NextCharacter; if (nextCharacter != null) { if (this.IsContained(baseChars, nextCharacter.Unencoded) || this.IsContained(immune, nextCharacter.Unencoded)) { stringBuilder.Append(nextCharacter.Unencoded); } else { stringBuilder.Append(nextCharacter.GetEncoded(3)); } } } return(stringBuilder.ToString()); }
private Encoder.EncodedCharacter PeekNextCharacter(char currentCharacter) { if (this.testCharacter == this.input.Length - 1) { ++this.testCharacter; return(new Encoder.EncodedCharacter(currentCharacter)); } switch (currentCharacter) { case '%': Encoder.EncodedCharacter percent = this.ParsePercent(this.input, this.testCharacter); if (percent != null) { return(percent); } break; case '&': return(this.ParseEntity(this.input, this.testCharacter)); } ++this.testCharacter; return(new Encoder.EncodedCharacter(currentCharacter)); }