构建带空格的正确链接

2 投票
2 回答
2087 浏览
提问于 2025-04-15 21:58

我有以下的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","带空格 & 其他"]} 等等。

撰写回答