|
|
@@ -149,18 +149,19 @@ def _strip_once(value):
|
|
|
else:
|
|
|
return s.get_data()
|
|
|
|
|
|
-
|
|
|
def strip_tags(value):
|
|
|
"""Returns the given HTML with all tags stripped."""
|
|
|
- while True:
|
|
|
- if not ('<' in value or '>' in value):
|
|
|
- return value
|
|
|
+ # Note: in typical case this loop executes _strip_once once. Loop condition
|
|
|
+ # is redundant, but helps to reduce number of executions of _strip_once.
|
|
|
+ while '<' in value and '>' in value:
|
|
|
new_value = _strip_once(value)
|
|
|
- if new_value == value:
|
|
|
- # _strip_once was not able to detect more tags
|
|
|
- return value
|
|
|
- else:
|
|
|
- value = new_value
|
|
|
+ if len(new_value) >= len(value):
|
|
|
+ # _strip_once was not able to detect more tags or length increased
|
|
|
+ # due to http://bugs.python.org/issue20288
|
|
|
+ # (affects Python 2 < 2.7.7 and Python 3 < 3.3.5)
|
|
|
+ break
|
|
|
+ value = new_value
|
|
|
+ return value
|
|
|
strip_tags = allow_lazy(strip_tags)
|
|
|
|
|
|
def remove_tags(html, tags):
|