Question

I'm using custom permalinks "/%category%/%postname%/". Whenever a post title contains quotes or apostrophes they appear in the URL.

Can someone tell me how prevent them from appearing in the slug?

I am running WordPress 3.0.4.

Was it helpful?

Solution

In WordPress, "---" and " -- " become em-dashes (— —) and "--" becomes an en-dash (— #8212;). The sanitize_title_with_dashes() function doesn't catch these.

That function uses the databased copy, but the title displayed to the user always goes through a texturize function. So if we replace en/em dashes on their way into the database, the net result will be the same and avoid these bad URL cases the titles are re-texturized.

add_action( 'title_save_pre', 'do_replace_dashes' );
function do_replace_dashes($string_to_clean) {
    # The html entities (–  and —) don’t actually work but I include them for kicks and giggles. 
    $string_to_clean = str_replace( array('—', '—', '–', '–', '‚', '„', '“', '”', '’', '‘', '…'), array(' -- ',' -- ', '--','--', ',', ',,', '"', '"', "'", "'", '...'), $string_to_clean );
    return $string_to_clean;
}

OTHER TIPS

I've seen there are some plugins to work around this problem. Check Clean URL for example:

This simple WordPress plugin is used when generating article slug (= article name used in URL). It removes all characters other than letters a-z, numbers and hyphens (-). The plugin runs as the last one in the whole url-generating process, so first all standard replacements of diacritics and accents are performed, and then, if still some strange characters are present they are cut out.

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top