I've found the following function in Practical Web 2.0 applications with PHP and MySQL:
function generateUniqueUrl($title) { $url = strtolower($title); $filters = array ( '/&+/' => 'and', '/[^a-z0-9]+/i' => '-', '/-+/' => '-' ); foreach($filters as $re => $replacement) { $url = preg_replace($re, $replacement, $url); } $url = trim($url, '-'); $url = trim(substr($url, 0, 30)); if(strlen($url) == 0) { $url = 'post'; } // find similar URLs in the database $query = sprintf("select url from %s where id_user = %d and url like ?", $this->_table, $this->id_user); $query = $this->_db->quoteInto($query, $url . '%'); $result = $this->_db->fetchCol($query); if(count($result) == 0 || !in_array($url, $result)) { return $url; } // generate an unique URL $i = 2; do { $_url = $url . '-' . $i++; } while(in_array($_url, $result)); return $_url; }
This function first filters all special characters that may occur in a post title, then check if there are similar URLs in other posts and finally generates an unique post identifier using a counter attached to the main URL. Very interesting!