构建带空格的正确链接
我有以下的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)
但似乎没有什么帮助。
谢谢!
2 个回答
1
除了使用 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
是最安全的选择。
2
确保你使用 urllib.quote_plus(string[, safe]) 来把空格替换成加号。
urllib.quote_plus(string[, safe])
这个函数和 quote() 类似,但它会把空格替换成加号,这在构建要放入 URL 的查询字符串时是必须的,特别是处理 HTML 表单的值时。原字符串中的加号会被转义,除非它们在 safe 参数中被包含。它的安全默认值不是 '/'。
来自 http://docs.python.org/library/urllib.html#urllib.quote_plus
理想情况下,你应该使用 urllib.urlencode 函数,并传入一系列的键值对,比如 {["q","带空格"],["s","带空格 & 其他"]} 等等。