challenge 改行をBRタグに置き換える

一部のHTMLタグを通すフィルタ どう書く?の続編です。 前回の条件を満たしつつ、入力中の改行を<br/>に置き換えてください。ただし、たとえば"<a\nhref=...>"といったようにタグの中に改行がある場合、単純に置換するわけには行かないことに注意してください。

また、ユーザの入力注の<br>は<br/>に変換してください。

このお題はperezvonさんの提案を元にした三部作の二問目です。ご協力ありがとうございました。

Posted feedbacks - diff

<z ...> のように &lt;z... に変換されるような、無効化されるタグのなかの改行は<br/>に変換しないんでしょうか?だとするとこうかな。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
--- b.orig	Thu Sep  6 23:45:32 2007
+++ b.py	Thu Sep  6 23:45:47 2007
@@ -17,13 +17,14 @@
 			return "<br/>"
 		else:
 			return m.group(0).replace("<", "&lt;")
+	html = re.compile('(<[^>]*>)|(\n)', re.S).sub(lambda m: m.group(1) or "<br/>", html)
 	html = re.compile(r"""<(/?)(\w+)((?:\s*\w+\s*=\s*(["']).+?\4)*)\s*(/?)>""", re.S).sub(repl, html)
-	return re.compile('(<[^>]*>)|(\n)', re.S).sub(lambda m: m.group(1) or "<br/>", html)
+	return html
 
 def main():
 	print filter("""<a href='www.google.com'>link</a> <blink>and</blink> <strong onClick='alert("NG")'>click<br>me!</strong>""")
 	print filter(""" <z foo='<script>alert("Boo")</script>'>""")
-	print filter("""<a href="foo.com"
+	print filter("""<z href="foo.com"
 name="foo">foo
 bar</a>baz
 boo""")

Index

Feed

Other

Link

Pathtraq

loading...