xmlsanitizer.go 540 B

1234567891011121314151617181920212223
  1. package shared
  2. import (
  3. "io"
  4. "golang.org/x/text/transform"
  5. )
  6. // NewXMLSanitizerReader creates an io.Reader that
  7. // wraps another io.Reader and removes illegal xml
  8. // characters from the io stream.
  9. func NewXMLSanitizerReader(xml io.Reader) io.Reader {
  10. isIllegal := func(r rune) bool {
  11. return !(r == 0x09 ||
  12. r == 0x0A ||
  13. r == 0x0D ||
  14. r >= 0x20 && r <= 0xDF77 ||
  15. r >= 0xE000 && r <= 0xFFFD ||
  16. r >= 0x10000 && r <= 0x10FFFF)
  17. }
  18. t := transform.Chain(transform.RemoveFunc(isIllegal))
  19. return transform.NewReader(xml, t)
  20. }