Java 创建SEO友好URI字符串的最佳方法
该方法应仅允许URI字符串中的“Java 创建SEO友好URI字符串的最佳方法,java,string,char,uri,slug,Java,String,Char,Uri,Slug,该方法应仅允许URI字符串中的“0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz-”字符 制作好SEO URI字符串的最佳方法是什么?下面的正则表达式将与您的算法执行相同的操作。我不知道图书馆做这种事情 String s = input .replaceAll(" ?- ?","-") // remove spaces around hyphens .replaceAll("[ ']","-") // turn spaces
0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz-
”字符
制作好SEO URI字符串的最佳方法是什么?下面的正则表达式将与您的算法执行相同的操作。我不知道图书馆做这种事情 String s = input .replaceAll(" ?- ?","-") // remove spaces around hyphens .replaceAll("[ ']","-") // turn spaces and quotes into hyphens .replaceAll("[^0-9a-zA-Z-]",""); // remove everything not in our allowed char set 字符串s=输入 .replaceAll(“?-?”,“-”//删除连字符周围的空格 .replaceAll(“[”],“-”/)将空格和引号转换为连字符 .replaceAll(“[^0-9a-zA-Z-]”,“);//删除不在我们允许的字符集中的所有内容
这就是普遍的共识:
string = string.toLowerCase();
-
排列,必要时折叠
string = string.replaceAll("[^\\p{Alnum}]+", "-");
public static String toPrettyURL(String string) {
return Normalizer.normalize(string.toLowerCase(), Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
.replaceAll("[^\\p{Alnum}]+", "-");
}
如果您想搜索更多信息,这些通常称为“slug”
您可能需要查看其他答案,如和
它们涉及的C#和Python比javascript更为广泛,但对slug约定和您在使用它们时可能遇到的问题(如唯一性、unicode规范化问题等)进行了一些语言无关的讨论。这听起来是个糟糕的想法。考虑一下。@ McCOG:听起来很像从标题中生成SEO友好的URL。请注意,我很想用一个连字符替换所有非alnum字符序列;相同的一般效果(如果在边缘情况下可能略有不同),但更容易理解。@Donal哦,对了。当然,您会从允许的字符集生成一个随机字符串吗?@marcog:这样做的目的是将该部分(实际上并不重要)放在URL的末尾;前面的路径片段是一个ID,它是实际定位问题的ID。使用用户输入是安全的,因为清除是根据严重的字符白名单定义的。(随机字符串?从哪里来的?@Donal好的,我知道你指的是什么。我以为你指的是这个问题的ID,例如4581025。谢谢你的澄清!还建议删除前导和尾随标点符号。//删除尾随标点符号。replaceAll(“[^a-z0-9]+$”,”)//删除前导标点符号。replaceAll(“^a-z0-9]+”,”);
public static String toPrettyURL(String string) {
return Normalizer.normalize(string.toLowerCase(), Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
.replaceAll("[^\\p{Alnum}]+", "-");
}