diff --git a/resources/content_server/gui.js b/resources/content_server/gui.js
index d0fb49cc8e..9ee61b1866 100644
--- a/resources/content_server/gui.js
+++ b/resources/content_server/gui.js
@@ -54,7 +54,7 @@ function render_book(book) {
formats = book.attr("formats").split(",");
if (formats.length > 0) {
for (i=0; i < formats.length; i++) {
- title += ''+formats[i]+', ';
+ title += ''+formats[i]+', ';
}
title = title.slice(0, title.length-2);
title += ' ({0} MB) '.format(size);
diff --git a/src/calibre/library/server/mobile.py b/src/calibre/library/server/mobile.py
index 229e0c21c4..cde245431f 100644
--- a/src/calibre/library/server/mobile.py
+++ b/src/calibre/library/server/mobile.py
@@ -18,6 +18,7 @@ from calibre.ebooks.metadata import fmt_sidx
from calibre.constants import __appname__
from calibre import human_readable
from calibre.utils.date import utcfromtimestamp, format_date
+from calibre.utils.filenames import ascii_filename
def CLASS(*args, **kwargs): # class is a reserved word in Python
kwargs['class'] = ' '.join(args)
@@ -110,11 +111,13 @@ def build_index(books, num, search, sort, order, start, total, url_base, CKEYS):
data = TD()
last = None
for fmt in book['formats'].split(','):
+ a = ascii_filename(book['authors'])
+ t = ascii_filename(book['title'])
s = SPAN(
A(
fmt.lower(),
- href='/get/%s/%s-%s_%d.%s' % (fmt, book['authors'],
- book['title'], book['id'], fmt)
+ href='/get/%s/%s-%s_%d.%s' % (fmt, a, t,
+ book['id'], fmt)
),
CLASS('button'))
s.tail = u'\u202f' #
diff --git a/src/calibre/library/server/xml.py b/src/calibre/library/server/xml.py
index ed8479980e..41fcfd8a93 100644
--- a/src/calibre/library/server/xml.py
+++ b/src/calibre/library/server/xml.py
@@ -16,6 +16,7 @@ from calibre.ebooks.metadata import fmt_sidx
from calibre.constants import preferred_encoding
from calibre import isbytestring
from calibre.utils.date import format_date
+from calibre.utils.filenames import ascii_filename
E = ElementMaker()
@@ -88,6 +89,8 @@ class XMLServer(object):
y = format_tag_string(y, ',')
kwargs[x] = serialize(y) if y else ''
+ kwargs['safe_title'] = ascii_filename(kwargs['title'])
+
c = kwargs.pop('comments')
CFM = self.db.field_metadata