diff --git a/classes/Tools.php b/classes/Tools.php index 10db11557..e6a1aea35 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -1025,47 +1025,66 @@ class ToolsCore */ public static function replaceAccentedChars($str) { + /* One source among others: + http://www.tachyonsoft.com/uc0000.htm + http://www.tachyonsoft.com/uc0001.htm + */ $patterns = array( + /* Lowercase */ - '/[\x{0105}\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}]/u', - '/[\x{00E7}\x{010D}\x{0107}]/u', - '/[\x{010F}]/u', - '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{011B}\x{0119}]/u', - '/[\x{00EC}\x{00ED}\x{00EE}\x{00EF}]/u', - '/[\x{011F}]/u', - '/[\x{0142}\x{013E}\x{013A}]/u', - '/[\x{00F1}\x{0148}]/u', - '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}]/u', - '/[\x{0159}\x{0155}]/u', - '/[\x{015B}\x{0161}\x{015F}]/u', - '/[\x{00DF}]/u', - '/[\x{0165}]/u', - '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{016F}]/u', - '/[\x{00FD}\x{00FF}]/u', - '/[\x{017C}\x{017A}\x{017E}]/u', - '/[\x{00E6}]/u', - '/[\x{0153}]/u', + /* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}]/u', + /* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}]/u', + /* d */ '/[\x{010F}\x{0111}]/u', + /* e */ '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{0113}\x{0115}\x{0117}\x{0119}\x{011B}]/u', + /* g */ '/[\x{011F}\x{0121}\x{0123}]/u', + /* h */ '/[\x{0125}\x{0127}]/u', + /* i */ '/[\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{0129}\x{012B}\x{012D}\x{012F}\x{0131}]/u', + /* j */ '/[\x{0135}]/u', + /* k */ '/[\x{0137}\x{0138}]/u', + /* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}]/u', + /* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}]/u', + /* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}]/u', + /* r */ '/[\x{0155}\x{0157}\x{0159}]/u', + /* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}]/u', + /* ss*/ '/[\x{00DF}]/u', + /* t */ '/[\x{0163}\x{0165}\x{0167}]/u', + /* u */ '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{0169}\x{016B}\x{016D}\x{016F}\x{0171}\x{0173}]/u', + /* w */ '/[\x{0175}]/u', + /* y */ '/[\x{00FF}\x{0177}\x{00FD}]/u', + /* z */ '/[\x{017A}\x{017C}\x{017E}]/u', + /* ae*/ '/[\x{00E6}]/u', + /* oe*/ '/[\x{0153}]/u', /* Uppercase */ - '/[\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}]/u', - '/[\x{00C7}\x{010C}\x{0106}]/u', - '/[\x{010E}]/u', - '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{011A}\x{0118}]/u', - '/[\x{011E}]/u', - '/[\x{0141}\x{013D}\x{0139}]/u', - '/[\x{00D1}\x{0147}]/u', - '/[\x{00D3}]/u', - '/[\x{0158}\x{0154}]/u', - '/[\x{015A}\x{0160}\x{015E}]/u', - '/[\x{0164}]/u', - '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{016E}]/u', - '/[\x{017B}\x{0179}\x{017D}]/u', - '/[\x{00C6}]/u', - '/[\x{0152}]/u'); + /* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}]/u', + /* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}]/u', + /* D */ '/[\x{010E}\x{0110}]/u', + /* E */ '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{0112}\x{0114}\x{0116}\x{0118}\x{011A}]/u', + /* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}]/u', + /* H */ '/[\x{0124}\x{0126}]/u', + /* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}]/u', + /* J */ '/[\x{0134}]/u', + /* K */ '/[\x{0136}]/u', + /* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}]/u', + /* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}]/u', + /* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}]/u', + /* R */ '/[\x{0154}\x{0156}\x{0158}]/u', + /* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}]/u', + /* T */ '/[\x{0162}\x{0164}\x{0166}]/u', + /* U */ '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{0168}\x{016A}\x{016C}\x{016E}\x{0170}\x{0172}]/u', + /* W */ '/[\x{0174}]/u', + /* Y */ '/[\x{0176}]/u', + /* Z */ '/[\x{0179}\x{017B}\x{017D}]/u', + /* AE*/ '/[\x{00C6}]/u', + /* OE*/ '/[\x{0152}]/u'); + + // ö to oe + // å to aa + // ä to ae $replacements = array( - 'a', 'c', 'd', 'e', 'i', 'g', 'l', 'n', 'o', 'r', 's', 'ss', 't', 'u', 'y', 'z', 'ae', 'oe', - 'A', 'C', 'D', 'E', 'G', 'L', 'N', 'O', 'R', 'S', 'T', 'U', 'Z', 'AE', 'OE' + 'a', 'c', 'd', 'e', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'o', 'r', 's', 'ss', 't', 'u', 'y', 'w', 'z', 'ae', 'oe', + 'A', 'C', 'D', 'E', 'G', 'H', 'I', 'J', 'K', 'L', 'N', 'O', 'R', 'S', 'T', 'U', 'Z', 'AE', 'OE' ); return preg_replace($patterns, $replacements, $str); diff --git a/js/admin.js b/js/admin.js index 30e7dda61..d5ef76b71 100644 --- a/js/admin.js +++ b/js/admin.js @@ -35,25 +35,54 @@ function str2url(str, encoding, ucfirst) str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]\\u00A1-\\uFFFF/g,''); else { - str = str.replace(/[\u0105\u0104\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/g,'a'); - str = str.replace(/[\u00E7\u010D\u0107\u0106]/g,'c'); - str = str.replace(/[\u010F]/g,'d'); - str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u011B\u0119\u0118\u0117]/g,'e'); - str = str.replace(/[\u00EC\u00ED\u00EE\u00EF\u012F]/g,'i'); - str = str.replace(/[\u0142\u0141]/g,'l'); - str = str.replace(/[\u00F1\u0148]/g,'n'); - str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00D3]/g,'o'); - str = str.replace(/[\u0159]/g,'r'); - str = str.replace(/[\u015B\u015A\u0161]/g,'s'); - str = str.replace(/[\u00DF]/g,'ss'); - str = str.replace(/[\u0165]/g,'t'); - str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u016F\u016B\u0173]/g,'u'); - str = str.replace(/[\u00FD\u00FF]/g,'y'); - str = str.replace(/[\u017C\u017A\u017B\u0179\u017E]/g,'z'); - str = str.replace(/[\u00E6]/g,'ae'); - str = str.replace(/[\u0153]/g,'oe'); - str = str.replace(/[\u013E\u013A]/g,'l'); - str = str.replace(/[\u0155]/g,'r'); + /* Lowercase */ + str = str.replace(/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u0101\u0103\u0105]/g, 'a'); + str = str.replace(/[\u00E7\u0107\u0109\u010D]/g, 'c'); + str = str.replace(/[\u010F\u0111]/g, 'd'); + str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u0113\u0115\u0117\u0119\u011B]/g, 'e'); + str = str.replace(/[\u011F\u0121\u0123]/g, 'g'); + str = str.replace(/[\u0125\u0127]/g, 'h'); + str = str.replace(/[\u00EC\u00ED\u00EE\u00EF\u0129\u012B\u012D\u012F\u0131]/g, 'i'); + str = str.replace(/[\u0135]/g, 'j'); + str = str.replace(/[\u0137\u0138]/g, 'k'); + str = str.replace(/[\u013A\u013C\u013E\u0140\u0142]/g, 'l'); + str = str.replace(/[\u00F1\u0144\u0146\u0148\u0149\u014B]/g, 'n'); + str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u014D\u014F\u0151]/g, 'o'); + str = str.replace(/[\u0155\u0157\u0159]/g, 'r'); + str = str.replace(/[\u015B\u015D\u015F\u0161]/g, 's'); + str = str.replace(/[\u00DF]/g, 'ss'); + str = str.replace(/[\u0163\u0165\u0167]/g, 't'); + str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u0169\u016B\u016D\u016F\u0171\u0173]/g, 'u'); + str = str.replace(/[\u0175]/g, 'w'); + str = str.replace(/[\u00FF\u0177\u00FD]/g, 'y'); + str = str.replace(/[\u017A\u017C\u017E]/g, 'z'); + str = str.replace(/[\u00E6]/g, 'ae'); + str = str.replace(/[\u0153]/g, 'oe'); + + /* Uppercase */ + str = str.replace(/[\u0100\u0102\u0104\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5]/g, 'A'); + str = str.replace(/[\u00C7\u0106\u0108\u010A\u010C]/g, 'C'); + str = str.replace(/[\u010E\u0110]/g, 'D'); + str = str.replace(/[\u00C8\u00C9\u00CA\u00CB\u0112\u0114\u0116\u0118\u011A]/g, 'E'); + str = str.replace(/[\u011C\u011E\u0120\u0122]/g, 'G'); + str = str.replace(/[\u0124\u0126]/g, 'H'); + str = str.replace(/[\u0128\u012A\u012C\u012E\u0130]/g, 'I'); + str = str.replace(/[\u0134]/g, 'J'); + str = str.replace(/[\u0136]/g, 'K'); + str = str.replace(/[\u0139\u013B\u013D\u0139\u0141]/g, 'L'); + str = str.replace(/[\u00D1\u0143\u0145\u0147\u014A]/g, 'N'); + str = str.replace(/[\u00D3\u014C\u014E\u0150]/g, 'O'); + str = str.replace(/[\u0154\u0156\u0158]/g, 'R'); + str = str.replace(/[\u015A\u015C\u015E\u0160]/g, 'S'); + str = str.replace(/[\u0162\u0164\u0166]/g, 'T'); + str = str.replace(/[\u00D9\u00DA\u00DB\u00DC\u0168\u016A\u016C\u016E\u0170\u0172]/g, 'U'); + str = str.replace(/[\u0174]/g, 'W'); + str = str.replace(/[\u0176]/g, 'Y'); + str = str.replace(/[\u0179\u017B\u017D]/g, 'Z'); + str = str.replace(/[\u00C6]/g, 'AE'); + str = str.replace(/[\u0152]/g, 'OE'); + + str = str.toLowerCase(); str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,''); }