Создание правильной связи с пробелами - PullRequest
2 голосов
/ 24 апреля 2010

У меня есть следующий код в Python:

linkHTML = "<a href=\"page?q=%s\">click here</a>" % strLink

Проблема в том, что когда в strLink есть пробелы, ссылка отображается как

<a href="page?q=with space">click here</a>

Я могу использовать strLink.replace ("", "+")

Но я уверен, что есть другие символы, которые могут вызвать ошибки. Я пытался использовать

urllib.quote(strLink)

Но, похоже, это не помогает.

Спасибо! Joel

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

Убедитесь, что вы используете urllib.quote_plus (строка [, safe]) для замены пробелов знаком плюс.

urllib.quote_plus(string[, safe])

Как цитата (), но также заменяет пробелы со знаком плюс, как требуется для цитирования Значения HTML-формы при создании Строка запроса, чтобы перейти в URL. плюс знаки в исходной строке сбежал, если они не включены в безопасный. Это также не имеет безопасного по умолчанию '/'.

от http://docs.python.org/library/urllib.html#urllib.quote_plus

В идеале вы должны использовать функцию urllib.urlencode и передавать ей последовательность пар ключ / значение, таких как {["q", "с пробелом"], ["s", "с пробелом и другими"]} и т.д.

1 голос
/ 24 апреля 2010

Как и quote_plus (*), вам также необходимо HTML-кодировать любой текст, который вы выводите в HTML. В противном случае символы < и & будут иметь разметку с потенциальными последствиями для безопасности. (Хорошо, вы не получите < в URL, но вы определенно получите &, так что только одно имя параметра, которое соответствует имени объекта HTML, и ваша строка испорчены.

html= '<a href="page?q=%s">click here</a>' % cgi.escape(urllib.quote_plus(q))

*: на самом деле старый добрый quote тоже хорошо; Я не знаю, что у вас не получилось, но это очень хороший способ для строк кодирования URL. Он преобразует пробелы в %20, что также допустимо и допустимо и в частях пути. quote_plus является оптимальным для генерации строк запроса, но в противном случае, если есть сомнения, quote является наиболее безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...