用纯 bash 创建 URL 友好的 slug?
Posted
技术标签:
【中文标题】用纯 bash 创建 URL 友好的 slug?【英文标题】:Create URL friendly slug with pure bash? 【发布时间】:2018-04-13 12:26:52 【问题描述】:我追求的是一个纯粹的 bash 解决方案来“slugify”一个变量,它不像我的那么难看。
slugify:小写,缩短为 63 字节,除了 0-9 和 a-z 替换为 -。没有前导/尾随 -。结果是一个适合在 URL 主机名和域名中使用的字符串。 输入很可能是一系列带有不想要的字符的单词,例如:
'Effrafax_mUKwT'uP7(Garkbitg@'k'
蛞蝓看起来像: 'effrafax-mukwt-up7-garkbit-1-njrjhactar-s-h-x-olazlarl-zss-c9-q'
slugify ()
next=$1//+([^A-Za-z0-9])/-
next=$next:0:63
next=$next,,
next=$next#-
next=$next%-
echo $next
还有为什么$next//^-|-$
不去掉前缀和后缀'-'
?其他建议?
【问题讨论】:
你能提供一个这样的示例 URL 来测试吗? 发布输入条目和预期输出将增加您获得快速帮助的机会 【参考方案1】:answer above 的 OS X 和 linux 兼容变体
slugify ()
echo "$1" | iconv -c -t ascii//TRANSLIT | sed -E 's/[~^]+//g' | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$//g' | tr A-Z a-z
【讨论】:
请记住,您可以组合多个 sed 语句,如下所示:【参考方案2】:我在我的 bash 个人资料中使用了这个功能:
slugify ()
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
基于:https://gist.github.com/oneohthree/f528c7ae1e701ad990e6
【讨论】:
效果很好!将-c
添加到iconv
以静默丢弃无法转换的字符。 ss64.com/bash/iconv.html以上是关于用纯 bash 创建 URL 友好的 slug?的主要内容,如果未能解决你的问题,请参考以下文章
生成 SEO 友好的 URL(slug)的最成熟的方式/lib 是啥?
Codeigniter - SEO 友好的 URL 结构(Slug 实现)