--- web/request.py.orig	2010-09-21 18:23:31.000000000 +1000
+++ web/request.py	2010-09-21 18:24:16.000000000 +1000
@@ -61,7 +61,25 @@
     def __init__(self, environ, populate_request=True, shallow=False):
         ResponseBase.__init__(self)
         RequestBase.__init__(self, environ, populate_request, shallow)
-        self.href = Href(self.script_root or '/', self.charset)
+
+        # Originally:
+        #self.href = Href(self.script_root or '/', self.charset)
+
+        # But that breaks on pages with a name such as "Titanic: The Comeback"
+        # as the : is not escaped and the : is interpreted as a protocol
+        # method. Fix this here by prepending a ./ to any generated hrefs that
+        # don't look like URLs.
+        self._href = Href(self.script_root or '/', self.charset)
+        def page_href(*args, **kwargs):
+            url = args[0]
+            if ':' in url and url[0] != '/':
+                method, _ = url.split(':', 1)
+                if method not in ('http', 'https', 'ftp', 'mailto'):
+                    url = './' + args[0]
+                    args = (url,) + args[1:]
+            return self._href(*args, **kwargs)
+        self.href = page_href
+
         self.abs_href = Href(self.url_root, self.charset)
         self.headers = Headers([('Content-Type', 'text/html')])
         self.response = []
