diff --git a/compressor/parser/default_htmlparser.py b/compressor/parser/default_htmlparser.py
index 80272cb..825808b 100644
--- a/compressor/parser/default_htmlparser.py
+++ b/compressor/parser/default_htmlparser.py
@@ -1,3 +1,5 @@
+import sys
+
from django.utils import six
from django.utils.encoding import smart_text
@@ -5,9 +7,26 @@ from compressor.exceptions import ParserError
from compressor.parser import ParserBase
+# Starting in Python 3.2, the HTMLParser constructor takes a 'strict'
+# argument which default to True (which we don't want).
+# In Python 3.3, it defaults to False.
+# In Python 3.4, passing it at all raises a deprecation warning.
+# So we only pass it for 3.2.
+# In Python 3.4, it also takes a 'convert_charrefs' argument
+# which raises a warning if we don't pass it.
+major, minor, release = sys.version_info[:3]
+CONSTRUCTOR_TAKES_STRICT = major == 3 and minor == 2
+CONSTRUCTOR_TAKES_CONVERT_CHARREFS = major == 3 and minor >= 4
+HTML_PARSER_ARGS = {}
+if CONSTRUCTOR_TAKES_STRICT:
+ HTML_PARSER_ARGS['strict'] = False
+if CONSTRUCTOR_TAKES_CONVERT_CHARREFS:
+ HTML_PARSER_ARGS['convert_charrefs'] = False
+
+
class DefaultHtmlParser(ParserBase, six.moves.html_parser.HTMLParser):
def __init__(self, content):
- six.moves.html_parser.HTMLParser.__init__(self)
+ six.moves.html_parser.HTMLParser.__init__(self, **HTML_PARSER_ARGS)
self.content = content
self._css_elems = []
self._js_elems = []