Urlize 在文本 href 中转义 %23
Urlize escaping %23 in href of text
我正在尝试呈现来自用户的带有 url 的文本,如下所示:https://example.com/%20%23654
我将 url 传递给 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
转义为 space 和 %23
为散列,但为什么它只转义 href 中的散列?这是一个错误吗?如果是有意的,为什么不将 %20
转义为空白 space?
我不认为这是一个错误。
我看到了这个问题的两个部分:
为什么它只转义散列而不转义 space?
为什么它只在 href 而不是在可见的 linked 文本中进行转义?
这是我对第一个的看法:
散列是完全合法的 URL 路径字符。它最常用于 HTML 中的锚点(示例和 link 文档合二为一!):
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>'
另一方面,space 不是合法的 URL 字符(尽管通常可以容忍)。因此,它在 link 和可见的 link 描述中都保持编码为 %20
。
问题的第二部分是为什么它只在 link 而不是在可见描述中转义。这也是有道理的。在href中,传入https://example.com/%66
或https://example.com/f
都没有关系。效果是一样的,描述是"under the hood."所以urlize
用了最简单的形式,去掉了不必要的编码。另一方面,将可见部分呈现给用户。因此,urlize
试图保留最初传入的准确描述,因为这是最不令人惊讶的事情。
我正在尝试呈现来自用户的带有 url 的文本,如下所示:https://example.com/%20%23654
我将 url 传递给 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
转义为 space 和 %23
为散列,但为什么它只转义 href 中的散列?这是一个错误吗?如果是有意的,为什么不将 %20
转义为空白 space?
我不认为这是一个错误。
我看到了这个问题的两个部分:
为什么它只转义散列而不转义 space? 为什么它只在 href 而不是在可见的 linked 文本中进行转义?
这是我对第一个的看法:
散列是完全合法的 URL 路径字符。它最常用于 HTML 中的锚点(示例和 link 文档合二为一!):
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>'
另一方面,space 不是合法的 URL 字符(尽管通常可以容忍)。因此,它在 link 和可见的 link 描述中都保持编码为 %20
。
问题的第二部分是为什么它只在 link 而不是在可见描述中转义。这也是有道理的。在href中,传入https://example.com/%66
或https://example.com/f
都没有关系。效果是一样的,描述是"under the hood."所以urlize
用了最简单的形式,去掉了不必要的编码。另一方面,将可见部分呈现给用户。因此,urlize
试图保留最初传入的准确描述,因为这是最不令人惊讶的事情。