我正在尝试呈现来自用户的文本,其中包含一个url:https://example.com/%20%23654
我把网址传给urlize,我得到了这个:
In[1]: outp = urlize('https://example.com/%20%23654'); print outp
Out[1]: u'<a href="https://example.com/%20#654">https://example.com/%20%23654</a>'我知道%20转义到一个空格,%23转到一个散列,但是为什么它只在href中转义哈希呢?这是个虫子吗?如果它是有意的,为什么它不将%20转义为空白呢?
发布于 2015-05-14 15:44:32
我不认为这是个窃听器。
我认为这个问题有两部分:
为什么它只释放散列而不是空格?为什么它只在href中执行不可逃避的操作,而不是在可见的链接文本中执行?
以下是我对第一个问题的看法:
散列是一个完全合法的URL路径字符。它通常用于HTML中的锚(例如,链接到文档中的一个!):
http://www.w3.org/TR/html4/struct/links.html#h-12.2
urlize意识到了这一点。它解开href中的散列。它适用于任何一个合法的URL字符的字母。下面是一个字母f的示例
>>> urlize('https://example.com/%66')
u'<a href="https://example.com/f">https://example.com/%66</a>'另一方面,空格不是合法的URL字符(尽管它经常被容忍)。因此,在链接和可见链接描述中,它仍然被编码到%20。
问题的第二部分是为什么它只是在链接中逃脱,而不是在可见的描绘中。这也很有道理。在href中,传入https://example.com/%66或https://example.com/f并不重要。效果是一样的,描绘的是“罩下”。因此,urlize使用最简单的形式,没有不必要的编码。另一方面,将可见部分呈现给用户。因此,urlize试图保留最初传递给它的精确描述,因为这是最不令人惊讶的事情。
https://stackoverflow.com/questions/30202334
复制相似问题