【问题标题】:How can I create a SEO friendly dash-delimited url from a string in PYTHON?如何从 PYTHON 中的字符串创建 SEO 友好的破折号分隔 url?
【发布时间】:2026-02-04 07:05:01
【问题描述】:

基本上,我的问题与this 相同,但在 Python(和 GAE)中,而不是 C#。

要求:

  • 用破折号分隔每个单词并删除所有标点符号(考虑到并非所有单词都用空格分隔。)
  • 函数接受最大长度,并获取低于该最大长度的所有标记。示例:ToSeoFriendly("hello world hello world", 14) 返回 "hello-world"
  • 所有单词都转换为小写。

【问题讨论】:

  • 注意:不要说SEO Friendly,而是说Search engine Friendly,因为SEO是搜索引擎优化
  • 这是合乎逻辑的,但现在您只是将术语的字母数增加了一倍。
  • “SE 友好”怎么样?

标签: python url


【解决方案1】:
def ToSeoFriendly(s, maxlen):
    '''Join with dashes, eliminate punction, clip to maxlen, lowercase.

        >>> ToSeoFriendly("The quick. brown4 fox jumped", 14)
        'the-quick-brow'

    '''
    t = '-'.join(s.split())                                # join words with dashes
    u = ''.join([c for c in t if c.isalnum() or c=='-'])   # remove punctation   
    return u[:maxlen].rstrip('-').lower()                  # clip to maxlen

if __name__ == '__main__':
    import doctest
    print doctest.testmod()

【讨论】:

    【解决方案2】:

    您要搜索的词是“slugify”。

    【讨论】:

      【解决方案3】:

      作为替代方案(可能是经过更多测试的版本),我建议您使用 Django 中的(最少修改的)slugify 代码:

      import unicodedata
      import re
      
      def slugify(value):
          """
          Normalizes string, converts to lowercase, removes non-alpha characters,
          and converts spaces to hyphens.
          """
          value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
          value = re.sub('[^\w\s-]', '', value).strip().lower()
          return re.sub('[-\s]+', '-', value)
      

      见:https://github.com/django/django/blob/master/django/utils/text.py#L435

      【讨论】: