SwiftSlug

SwiftSlug 是一个简单的软件包,用于将字符串转换为 URL slug。“Slug” 是您网站上页面的地址,出于 SEO 的原因,通常使用您页面的标题创建。SwiftSlug 负责将诸如 “Hello, world!” 这样的字符串转换为 “hello-world”,以便在 URL 中安全使用。

SwiftSlug 在 macOS 和 Linux 上均可运行,但由于 API 限制,在两个平台上运行方式截然不同。在 macOS 10.11 或更高版本上,SwiftSlug 使用 ICU 转换,以便将所有 UTF-8 字符正确音译为拉丁字母,但在 Linux 上此方法不可用,因此它改为执行有损 ASCII 转换。

如果您能想到任何改进跨平台音译的方法,非常欢迎提交 pull request!

用法

SwiftSlug 在 Swift 的 String 类型上添加了一个 convertedToSlug() 方法,该方法返回 String?:如果转换成功则返回字符串,否则返回 nil。 例如,这将打印 “hello-world”

if let slug = try? "Hello, world".convertedToSlug() {
    print(slug)
}

如果由于某些原因无法进行音译,或者如果生成的 slug 字符数为零,则该方法将抛出 SlugConversionError.failedToConvert 错误。

注意: 尽管支持 macOS 10.10,但最好将部署目标设置为 10.11 (El Capitan) 或更高版本,以获得最佳效果。

示例

if let slug1 = try? "Hello, world".convertedToSlug() {
    print(slug1)
} else {
    print("slug1 could not be converted.")
}

if let slug2 = try? "!@$%^Hello, world!:|~?><".convertedToSlug() {
    print(slug2)
} else {
    print("slug2 could not be converted.")
}

if let slug3 = try? "吃葡萄不吐葡萄皮".convertedToSlug() {
    print(slug3)
} else {
    print("slug3 could not be converted.")
}

macOS 上的输出

hello-world

hello-world

chi-pu-tao-bu-tu-pu-tao-pi

Linux 上的输出

hello-world

hello-world

slug3 无法转换。

Linux 无法转换 slug3,因为它不包含任何可以通过有损转换简化为 ASCII 的字符。

许可证

此软件包根据 MIT 许可证发布,许可证副本如下。

版权所有 (c) 2016 Paul Hudson

特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向为其提供本软件的人员授予该等许可,但须符合以下条件

上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,因本软件或本软件的使用或其他交易而产生、源于本软件或与本软件有关。