code: func Sanitize(w io.Writer, r io.Reader) (err error) {
  	var root *html.Node
  	root, err = html.Parse(r)
  	if err != nil {
  		return err
  	}
  
  	sw, ok := w.(stringWriter)
  	if !ok {
  		bw := bufio.NewWriter(w)
  		defer func() {
  			ferr := bw.Flush()
  			if err == nil {
  				err = ferr
  			}
  		}()
  		sw = bw
  	}
  
  	s := sanitizer{sw: sw}
  	s.visit(root)
  	return s.err
  }
docs: // Sanitize strips all HTML nodes except allowed ones.
  //
  // Unless explicitly specified, attributes are stripped.
  // Allowed elements:
  //  - p, br
  //  - strong, em
  //  - a
  //    - if href attribute is not a valid absolute HTTP(s) link, it is replaced
  //      with an innocuous one.
  //    - alt attribute is allowed
  //  - ul, ol, li
  //
  // Elements <script> and <style> are ignored entirely.
  // For all other HTML nodes, Sanitize ignores the node, but visits its children.