Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建SEO友好URI字符串的最佳方法_Java_String_Char_Uri_Slug - Fatal编程技术网

Java 创建SEO友好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

该方法应仅允许URI字符串中的“
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();
    
  • 所有字符,并去掉所有字符(使例如é,ö,á变成e,o,a)

  • 剩余的非字母数字字符按
    -
    排列,必要时折叠

    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}]+", "-");
    }