---
name: "HTML::HTML5::Sanity"
section: "3pm"
platform: "linux"
package: "libhtml-html5-sanity-perl"
version: "0.105-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTML::HTML5::Sanity"
---

# HTML::HTML5::Sanity(3pm)

make HTML5 DOM trees less insane

## NAME

HTML::HTML5::Sanity - make HTML5 DOM trees less insane

## SYNOPSIS

```
  use HTML::HTML5::Parser;
  use HTML::HTML5::Sanity;

  my $parser    = HTML::HTML5::Parser->new;
  my $html5_dom = $parser->parse_file('http://example.com/');
  my $sane_dom  = fix_document($html5_dom);
```

## DESCRIPTION

The Document Object Model (DOM) generated by HTML::HTML5::Parser meets the requirements of the HTML5 spec, but will probably catch a lot of people by surprise.

The main oddity is that elements and attributes which appear to be namespaced are not really. For example, the following element:

```
  <div xml:lang="fr">...</div>
```

Looks like it should be parsed so that it has an attribute "lang" in the XML namespace. Not so. It will really be parsed as having the attribute "xml:lang" in the null namespace.

- "fix\_document($document)"

  ```
    $sane_dom = fix_document($html5_dom);
  ```

  Returns a modified copy of the DOM and leaving the original DOM unmodified.

- "fix\_element($element\_node, $new\_document\_node, \\%namespaces)"

  Don't use this. Not exported.

- "fix\_attribute($attribute\_node, $new\_element\_node, \\%namespaces)"

  Don't use this. Not exported.

- $HTML::HTML5::Sanity::FIX\_LANG\_ATTRIBUTES

  ```
    $HTML::HTML5::Sanity::FIX_LANG_ATTRIBUTES = 2;
    $sane_dom = fix_document($html5_dom);
  ```

  If set to 1 (the default), the package will detect invalid values in `@lang` and `@xml:lang`, and remove the attribute if it is invalid. If set to 2, it will also attempt to canonicalise the value (e.g. 'EN\_GB' will be converted to to 'en-GB'). If set to 0, then the value of language attributes is not checked.

## BUGS

Please report any bugs to \<http://rt.cpan.org/\>.

## SEE ALSO

HTML::HTML5::Parser, XML::LibXML, Task::HTML5.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## COPYRIGHT AND LICENSE

Copyright (C) 2009-2014 by Toby Inkster

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
