Note that there are some explanatory texts on larger screens.

plurals
  1. POImprove my function: generate SEO friendly title
    primarykey
    data
    text
    <p>I am using this function to generate SEO friendly titles, but I think it can be improved, anyone want to try? It does a few things: cleans common accented letters, check against a "forbidden" array, and check optionally against a database of titles in use.</p> <pre><code> /** * Recursive function that generates a unique "this-is-the-title123" string for use in URL. * Checks optionally against $table and $field and the array $forbidden to make sure it's unique. * Usage: the resulting string should be saved in the db with the object. */ function seo_titleinurl_generate($title, $forbidden = FALSE, $table = FALSE, $field = FALSE) { ## 1. parse $title $title = clean($title, "oneline"); // remove tags and such $title = ereg_replace(" ", "-", $title); // replace spaces by "-" $title = ereg_replace("á", "a", $title); // replace special chars $title = ereg_replace("í", "i", $title); // replace special chars $title = ereg_replace("ó", "o", $title); // replace special chars $title = ereg_replace("ú", "u", $title); // replace special chars $title = ereg_replace("ñ", "n", $title); // replace special chars $title = ereg_replace("Ñ", "n", $title); // replace special chars $title = strtolower(trim($title)); // lowercase $title = preg_replace("/([^a-zA-Z0-9_-])/",'',$title); // only keep standard latin letters and numbers, hyphens and dashes ## 2. check against db (optional) if ($table AND $field) { $sql = "SELECT * FROM $table WHERE $field = '" . addslashes($title) . "'"; $res = mysql_debug_query($sql); if (mysql_num_rows($res) &gt; 0) { // already taken. So recursively adjust $title and try again. $title = append_increasing_number($title); $title = seo_titleinurl_generate($title, $forbidden, $table, $field); } } ## 3. check against $forbidden array if ($forbidden) { while (list ($key, $val) = each($forbidden)) { // $val is the forbidden string if ($title == $val) { $title = append_increasing_number($title); $title = seo_titleinurl_generate($title, $forbidden, $table, $field); } } } return $title; } /** * Function that appends an increasing number to a string, for example "peter" becomes "peter1" and "peter129" becomes "peter130". * (To improve, this function could be made recursive to deal with numbers over 99999.) */ function append_increasing_number($title) { ##. 1. Find number at end of string. $last1 = substr($title, strlen($title)-1, 1); $last2 = substr($title, strlen($title)-2, 2); $last3 = substr($title, strlen($title)-3, 3); $last4 = substr($title, strlen($title)-4, 4); $last5 = substr($title, strlen($title)-5, 5); // up to 5 numbers (ie. 99999) if (is_numeric($last5)) { $last5++; // +1 $title = substr($title, 0, strlen($title)-5) . $last5; } elseif (is_numeric($last4)) { $last4++; // +1 $title = substr($title, 0, strlen($title)-4) . $last4; } elseif (is_numeric($last3)) { $last3++; // +1 $title = substr($title, 0, strlen($title)-3) . $last3; } elseif (is_numeric($last2)) { $last2++; // +1 $title = substr($title, 0, strlen($title)-2) . $last2; } elseif (is_numeric($last1)) { $last1++; // +1 $title = substr($title, 0, strlen($title)-1) . $last1; } else { $title = $title . "1"; // append '1' } return $title; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload