3 回答
TA贡献1793条经验 获得超6个赞
您可以查看Django框架,了解它们如何从任意文本创建“子弹”。slug是URL和文件名友好的。
Django文本工具定义了一个函数,slugify()这可能是此类事情的黄金标准。本质上,它们的代码如下。
def slugify(value):
"""
Normalizes string, converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
"""
import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
value = unicode(re.sub('[-\s]+', '-', value))
还有更多,但我不予赘述,因为它不解决节段化,而是逃脱。
TA贡献1859条经验 获得超6个赞
只是为了使事情更加复杂,不能保证仅通过删除无效字符就可以获得有效的文件名。由于不同文件名上允许的字符不同,因此保守的方法可能最终将有效名称变成无效名称。在以下情况下,您可能需要添加特殊处理:
该字符串是所有无效字符(留空字符串)
您最终得到一个具有特殊含义的字符串,例如“。”。要么 ”..”
在Windows上,某些设备名称被保留。例如,您无法创建名为“ nul”,“ nul.txt”(或实际上是nul.anything)的文件。保留名称为:
CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9
您可以通过在文件名前添加一些字符串来解决这些问题,这些文件名永远不会导致这些情况之一,并去除无效字符。
添加回答
举报