如何用PHP生成seo友好的URL?

时间:2009-09-25 12:00:21

标签: php url seo

我想将http://mysite.com/id255/改为http://mysite.com/gora-beach-inn/

我的php看起来像:

$result = mysql_query("
    SELECT id, header
    FROM Article
");


while($data = mysql_fetch_assoc($result)){  
    mysql_query("
        UPDATE Article
        SET seo = '".MakeSeo($data['header'])."'
        WHERE datum = '".$data['datum']."'
    ");
}

//Convert: "åäö" to "aao", "space" to "-", "!?" to "nothing", and all to lower case.
function MakeSeo($string)
{
    ???
}

请帮我使用MakeSoe功能。

我使用的是moderewrite,所以我只需要帮助来生成url,所以我可以将它们保存在我的数据库中。

3 个答案:

答案 0 :(得分:5)

只是回答你的要求.. 你去吧..

function makeSeo($text, $limit=75)
    {
      // replace non letter or digits by -
      $text = preg_replace('~[^\\pL\d]+~u', '-', $text);

      // trim
      $text = trim($text, '-');

      // lowercase
      $text = strtolower($text);

      // remove unwanted characters
      $text = preg_replace('~[^-\w]+~', '', $text);

      if(strlen($text) > 70) {
        $text = substr($text, 0, 70);
      } 

      if (empty($text))
      {
        //return 'n-a';
        return time();
      }

      return $text;
    }

您可以添加更多过滤器来清理网址,也可以添加更多内容以使该网址独一无二。

注意:我并不是说将数据库添加到数据库是最好的方法。您可以使用其他技术实现相同类型的功能,例如mod_rewrite。

答案 1 :(得分:2)

您需要使用mod_rewrite来实现此目的,否则另一种方法是由php完成的“内部”方法,您可以在其中执行类似的操作:

http://mydomain.com/index.php/category/dogs

上面只是一个GET帖子,索引通过includes / mysql等处理内容加载;

答案 2 :(得分:0)

非正则表达式和更灵活的解决方案可以通过2个阵列完成。将中的所有字符从定义为数组。省略的字符将被替换为 - 这是javascript函数的例子

function ToSeoFriendly(title) {
  title = title.toLowerCase();
  var generated = "";
  var from = "ãàáäâẽèéëêìíïîõòóöôùúüûñçýčšžřľňäôabcdefghijklmnopqrstuvwxyz1234567890";
  var to   = "aaaaaeeeeeiiiiooooouuuuncycszrlnaoabcdefghijklmnopqrstuvwxyz1234567890-";
  for (var i=0;i<title.length;i++){
    generated += to.substr(from.indexOf(title.substr(i,1)),1);
  }
  return generated;
}