9

我有一个将 URL 转换为 SEO 友好 URL 的 PHP 函数:

function seo_url($input){
     $input = str_replace(array("'", "-"), "", $input); //remove single quote and dash
     $input = mb_convert_case($input, MB_CASE_LOWER, "UTF-8"); //convert to lowercase
     $input = preg_replace("#[^a-zA-Z0-9]+#", "-", $input); //replace everything non an with dashes
     $input = preg_replace("#(-){2,}#", "$1", $input); //replace multiple dashes with one
     $input = trim($input, "-"); //trim dashes from beginning and end of string if any
     return $input;
}

我知道 SEO 对 javascript 中的 URL 执行此操作毫无意义,但为了保持一致性,我希望 URL 在我的应用程序中显示相同。有没有人在javascript中有方便的功能?:]

4

3 回答 3

21

将不同的解决方案组合在一起,请考虑这个替代代码,单行代码:

function toSeoUrl(url) {
    return url.toString()               // Convert to string
        .normalize('NFD')               // Change diacritics
        .replace(/[\u0300-\u036f]/g,'') // Remove illegal characters
        .replace(/\s+/g,'-')            // Change whitespace to dashes
        .toLowerCase()                  // Change to lowercase
        .replace(/&/g,'-and-')          // Replace ampersand
        .replace(/[^a-z0-9\-]/g,'')     // Remove anything that is not a letter, number or dash
        .replace(/-+/g,'-')             // Remove duplicate dashes
        .replace(/^-*/,'')              // Remove starting dashes
        .replace(/-*$/,'');             // Remove trailing dashes
}
于 2017-12-28T01:04:12.000 回答
16

看看这个 Javascript 模块(我是作者),它在浏览器和服务器/nodejs 中工作:
SpeakingURL

于 2013-11-28T13:58:59.743 回答
5

var url ="Evanston, IN 47531, USA pizza food & wine & music";

document.write(ToSeoUrl(url));
  
function ToSeoUrl(url) {
        
  // make the url lowercase         
  var encodedUrl = url.toString().toLowerCase(); 

  // replace & with and           
  encodedUrl = encodedUrl.split(/\&+/).join("-and-")

  // remove invalid characters 
  encodedUrl = encodedUrl.split(/[^a-z0-9]/).join("-");       

  // remove duplicates 
  encodedUrl = encodedUrl.split(/-+/).join("-");

  // trim leading & trailing characters 
  encodedUrl = encodedUrl.trim('-'); 

  return encodedUrl; 
}

于 2016-04-15T16:12:55.110 回答