How to prevent apostrophes and quotes from appearing in permalinks?
-
16-10-2019 - |
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.
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.