Last active
October 4, 2018 14:33
-
-
Save chaushevic/14445cce21a8d0516026f8a714b6fb08 to your computer and use it in GitHub Desktop.
Allow saving URL with dots in WordPress
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Remove and copy over default sanitize_title_with_dashes functionality and add dot as allowed character | |
remove_filter( "sanitize_title", "sanitize_title_with_dashes", 10 ); | |
add_filter( "sanitize_title", function($title, $raw_title = "", $context = "display") { | |
$title = strip_tags($title); | |
// Preserve escaped octets. | |
$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); | |
// Remove percent signs that are not part of an octet. | |
$title = str_replace('%', '', $title); | |
// Restore octets. | |
$title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); | |
if (seems_utf8($title)) { | |
if (function_exists('mb_strtolower')) { | |
$title = mb_strtolower($title, 'UTF-8'); | |
} | |
$title = utf8_uri_encode($title, 200); | |
} | |
$title = strtolower($title); | |
if ( 'save' == $context ) { | |
// Convert nbsp, ndash and mdash to hyphens | |
$title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); | |
// Convert nbsp, ndash and mdash HTML entities to hyphens | |
$title = str_replace( array( ' ', ' ', '–', '–', '—', '—' ), '-', $title ); | |
// Convert forward slash to hyphen | |
$title = str_replace( '/', '-', $title ); | |
// Strip these characters entirely | |
$title = str_replace( array( | |
// iexcl and iquest | |
'%c2%a1', '%c2%bf', | |
// angle quotes | |
'%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', | |
// curly quotes | |
'%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', | |
'%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', | |
// copy, reg, deg, hellip and trade | |
'%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', | |
// acute accents | |
'%c2%b4', '%cb%8a', '%cc%81', '%cd%81', | |
// grave accent, macron, caron | |
'%cc%80', '%cc%84', '%cc%8c', | |
), '', $title ); | |
// Convert times to x | |
$title = str_replace( '%c3%97', 'x', $title ); | |
} | |
$title = preg_replace('/&.+?;/', '', $title); // kill entities | |
// Stop converting dot to dash | |
//$title = str_replace('.', '-', $title); | |
$title = preg_replace('/[^%a-z0-9 ._-]/', '', $title); // Allow dot when removing invalid chars | |
$title = preg_replace('/\s+/', '-', $title); | |
$title = preg_replace('|-+|', '-', $title); | |
// Allowing the following two rules below will break any current page which has multiple dots or dashes around dots | |
// Ex. /log-.-in/ /log...in/ /log---.in/ will all become 404 links | |
$title = preg_replace( "/[-]*[.][-]*/", ".", $title ); // Disallow dash(es) around dot | |
$title = preg_replace( "/[.]+/", ".", $title ); // Disallow multiple dots in succession | |
$title = trim($title, '-.'); // Also trim leading and trailing dot(s) | |
return $title; | |
}, 10, 3 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment