let html_escaper str =
  let buffer = Buffer.create (String.length str) in
  let addc = Buffer.add_char buffer in
  let addse se =
    addc '&';
    Buffer.add_string buffer se;
    addc ';'
  in
    String.iter
      (function
         | '"' -> addse "quot"
         | '&' -> addse "amp"
         | '<' -> addse "lt"
         | '>' -> addse "gt"
(*
         | 'Œ' -> addse "OElig"
         | 'œ' -> addse "oelig"
         | 'Š' -> addse "Scaron"
         | 'š' -> addse "scaron"
         | 'Ÿ' -> addse "Yuml"
         | 'ˆ' -> addse "circ"
         | '˜' -> addse "tilde"
         | ' ' -> addse "ensp"
         | ' ' -> addse "emsp"
         | ' ' -> addse "thinsp"
         | '–' -> addse "ndash"
         | '—' -> addse "mdash"
         | '‘' -> addse "lsquo"
         | '’' -> addse "rsquo"
         | '‚' -> addse "sbquo"
         | '“' -> addse "ldquo"
         | '”' -> addse "rdquo"
         | '„' -> addse "bdquo"
         | '†' -> addse "dagger"
         | '‡' -> addse "Dagger"
         | '‰' -> addse "permil"
         | '‹' -> addse "lsaquo"
         | '›' -> addse "rsaquo"
         | '€' -> addse "euro"
 *)

         | '\'' -> addse "#39"
         | c -> addc c)
      str;
    Buffer.contents buffer