rails和django等web框架内置了对“slug”的支持,用于生成可读的和seo友好的URL:
铁轨上的弹头
django的鼻涕虫
段塞字符串通常只包含 a-z
, 0-9
以及 -
因此可以在没有url转义的情况下编写(比如“foo%20bar”)。
我正在寻找一个java slug函数,给定任何有效的unicode字符串都将返回slug表示( a-z
, 0-9
以及 -
).
一个简单的slug函数可以是:
return input.toLowerCase().replaceAll("[^a-z0-9-]", "");
但是,这个实现不会处理国际化和重音( ë
> e
). 解决这个问题的一种方法是列举所有的特殊情况,但这并不是很优雅。我在找一个更周密和全面的。
我的问题是:
在java中生成django/rails类型slug最通用/实用的方法是什么
5条答案
按热度按时间sdnqo3pr1#
麦克道尔的主张几乎奏效,但在这样的情况下
Hello World !!
它回来了hello-world--
(注意--
在字符串的末尾)而不是hello-world
.固定版本可以是:
tct7dpnv2#
我用@mcdowell扩展了答案,将转义标点作为连字符,并删除了重复的和前导/尾随的连字符。
a5g8bdjr3#
使用规范分解规范化字符串:
不过,这仍然是一个相当幼稚的过程。这对s-sharp没有任何帮助(ß - 用于德语),或任何非拉丁字母(希腊语、西里尔语、cjk等)。
更改字符串的大小写时要小心。大写和小写形式取决于字母表。在土耳其语中,u+0069(i)的大小写为u+0130(i)̇), 不是u+0049(i),所以如果使用
String.toLowerCase()
在土耳其的地方。xdyibdwo4#
其他语言参考库:http://www.codecodex.com/wiki/generate_a_url_slug
ki0zmccv5#
http://search.maven.org/#search|ga | 1 |缓动
下面是github存储库,可以查看代码及其用法:
https://github.com/slugify/slugify