diff --git a/classes/Tools.php b/classes/Tools.php index 91b82f7ca..44eb80ce3 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -1104,63 +1104,94 @@ class ToolsCore /* One source among others: http://www.tachyonsoft.com/uc0000.htm http://www.tachyonsoft.com/uc0001.htm + http://www.tachyonsoft.com/uc0004.htm */ $patterns = array( /* Lowercase */ - /* 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', + /* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}\x{0430}]/u', + /* b */ '/[\x{0431}]/u', + /* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}\x{0446}]/u', + /* d */ '/[\x{010F}\x{0111}\x{0434}]/u', + /* e */ '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{0113}\x{0115}\x{0117}\x{0119}\x{011B}\x{0435}\x{044D}]/u', + /* f */ '/[\x{0444}]/u', + /* g */ '/[\x{011F}\x{0121}\x{0123}\x{0433}\x{0491}]/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}\x{0438}\x{0456}]/u', + /* j */ '/[\x{0135}\x{0439}]/u', + /* k */ '/[\x{0137}\x{0138}\x{043A}]/u', + /* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}\x{043B}]/u', + /* m */ '/[\x{043C}]/u', + /* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}\x{043D}]/u', + /* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}\x{043E}]/u', + /* p */ '/[\x{043F}]/u', + /* r */ '/[\x{0155}\x{0157}\x{0159}\x{0440}]/u', + /* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}\x{0441}]/u', + /* ss */ '/[\x{00DF}]/u', + /* t */ '/[\x{0163}\x{0165}\x{0167}\x{0442}]/u', + /* u */ '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{0169}\x{016B}\x{016D}\x{016F}\x{0171}\x{0173}\x{0443}]/u', + /* v */ '/[\x{0432}]/u', + /* w */ '/[\x{0175}]/u', + /* y */ '/[\x{00FF}\x{0177}\x{00FD}\x{044B}]/u', + /* z */ '/[\x{017A}\x{017C}\x{017E}\x{0437}]/u', + /* ae */ '/[\x{00E6}]/u', + /* ch */ '/[\x{0447}]/u', + /* kh */ '/[\x{0445}]/u', + /* oe */ '/[\x{0153}]/u', + /* sh */ '/[\x{0448}]/u', + /* shh*/ '/[\x{0449}]/u', + /* ya */ '/[\x{044F}]/u', + /* ye */ '/[\x{0454}]/u', + /* yi */ '/[\x{0457}]/u', + /* yo */ '/[\x{0451}]/u', + /* yu */ '/[\x{044E}]/u', + /* zh */ '/[\x{0436}]/u', /* Uppercase */ - /* 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'); + /* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}\x{0410}]/u', + /* B */ '/[\x{0411}]]/u', + /* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}\x{0426}]/u', + /* D */ '/[\x{010E}\x{0110}\x{0414}]/u', + /* E */ '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{0112}\x{0114}\x{0116}\x{0118}\x{011A}\x{0415}\x{042D}]/u', + /* F */ '/[\x{0424}]/u', + /* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}\x{0413}\x{0490}]/u', + /* H */ '/[\x{0124}\x{0126}]/u', + /* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}\x{0418}\x{0406}]/u', + /* J */ '/[\x{0134}\x{0419}]/u', + /* K */ '/[\x{0136}\x{041A}]/u', + /* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}\x{041B}]/u', + /* M */ '/[\x{041C}]/u', + /* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}\x{041D}]/u', + /* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}\x{041E}]/u', + /* P */ '/[\x{041F}]/u', + /* R */ '/[\x{0154}\x{0156}\x{0158}\x{0420}]/u', + /* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}\x{0421}]/u', + /* T */ '/[\x{0162}\x{0164}\x{0166}\x{0422}]/u', + /* U */ '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{0168}\x{016A}\x{016C}\x{016E}\x{0170}\x{0172}\x{0423}]/u', + /* V */ '/[\x{0412}]/u', + /* W */ '/[\x{0174}]/u', + /* Y */ '/[\x{0176}\x{042B}]/u', + /* Z */ '/[\x{0179}\x{017B}\x{017D}\x{0417}]/u', + /* AE */ '/[\x{00C6}]/u', + /* CH */ '/[\x{0427}]/u', + /* KH */ '/[\x{0425}]/u', + /* OE */ '/[\x{0152}]/u', + /* SH */ '/[\x{0428}]/u', + /* SHH*/ '/[\x{0429}]/u', + /* YA */ '/[\x{042F}]/u', + /* YE */ '/[\x{0404}]/u', + /* YI */ '/[\x{0407}]/u', + /* YO */ '/[\x{0401}]/u', + /* YU */ '/[\x{042E}]/u', + /* ZH */ '/[\x{0416}]/u'); // ö to oe // å to aa // ä to ae $replacements = array( - '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', 'Y', 'W', 'Z', 'AE', 'OE' + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'ss', 't', 'u', 'v', 'w', 'y', 'z', 'ae', 'ch', 'kh', 'oe', 'sh', 'shh', 'ya', 'ye', 'yi', 'yo', 'yu', 'zh', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'Y', 'Z', 'AE', 'CH', 'KH', 'OE', 'SH', 'SHH', 'YA', 'YE', 'YI', 'YO', 'YU', 'ZH' ); return preg_replace($patterns, $replacements, $str); diff --git a/js/admin.js b/js/admin.js index 3c33b504b..db8a52d7d 100644 --- a/js/admin.js +++ b/js/admin.js @@ -36,51 +36,81 @@ function str2url(str, encoding, ucfirst) else { /* 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(/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u0101\u0103\u0105\u0430]/g, 'a'); + str = str.replace(/[\u0431]/g, 'b'); + str = str.replace(/[\u00E7\u0107\u0109\u010D\u0446]/g, 'c'); + str = str.replace(/[\u010F\u0111\u0434]/g, 'd'); + str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u0113\u0115\u0117\u0119\u011B\u0435\u044D]/g, 'e'); + str = str.replace(/[\u0444]/g, 'f'); + str = str.replace(/[\u011F\u0121\u0123\u0433\u0491]/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(/[\u00EC\u00ED\u00EE\u00EF\u0129\u012B\u012D\u012F\u0131\u0438\u0456]/g, 'i'); + str = str.replace(/[\u0135\u0439]/g, 'j'); + str = str.replace(/[\u0137\u0138\u043A]/g, 'k'); + str = str.replace(/[\u013A\u013C\u013E\u0140\u0142\u043B]/g, 'l'); + str = str.replace(/[\u043C]/g, 'm'); + str = str.replace(/[\u00F1\u0144\u0146\u0148\u0149\u014B\u043D]/g, 'n'); + str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u014D\u014F\u0151\u043E]/g, 'o'); + str = str.replace(/[\u043F]/g, 'p'); + str = str.replace(/[\u0155\u0157\u0159\u0440]/g, 'r'); + str = str.replace(/[\u015B\u015D\u015F\u0161\u0441]/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(/[\u0163\u0165\u0167\u0442]/g, 't'); + str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u0169\u016B\u016D\u016F\u0171\u0173\u0443]/g, 'u'); + str = str.replace(/[\u0432]/g, 'v'); 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(/[\u00FF\u0177\u00FD\u044B]/g, 'y'); + str = str.replace(/[\u017A\u017C\u017E\u0437]/g, 'z'); str = str.replace(/[\u00E6]/g, 'ae'); + str = str.replace(/[\u0447]/g, 'ch'); + str = str.replace(/[\u0445]/g, 'kh'); str = str.replace(/[\u0153]/g, 'oe'); + str = str.replace(/[\u0448]/g, 'sh'); + str = str.replace(/[\u0449]/g, 'ssh'); + str = str.replace(/[\u044F]/g, 'ya'); + str = str.replace(/[\u0454]/g, 'ye'); + str = str.replace(/[\u0457]/g, 'yi'); + str = str.replace(/[\u0451]/g, 'yo'); + str = str.replace(/[\u044E]/g, 'yu'); + str = str.replace(/[\u0436]/g, 'zh'); /* 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(/[\u0100\u0102\u0104\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u0410]/g, 'A'); + str = str.replace(/[\u0411]/g, 'B'); + str = str.replace(/[\u00C7\u0106\u0108\u010A\u010C\u0426]/g, 'C'); + str = str.replace(/[\u010E\u0110\u0414]/g, 'D'); + str = str.replace(/[\u00C8\u00C9\u00CA\u00CB\u0112\u0114\u0116\u0118\u011A\u0415\u042D]/g, 'E'); + str = str.replace(/[\u0424]/g, 'F'); + str = str.replace(/[\u011C\u011E\u0120\u0122\u0413\u0490]/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(/[\u0128\u012A\u012C\u012E\u0130\u0418\u0406]/g, 'I'); + str = str.replace(/[\u0134\u0419]/g, 'J'); + str = str.replace(/[\u0136\u041A]/g, 'K'); + str = str.replace(/[\u0139\u013B\u013D\u0139\u0141\u041B]/g, 'L'); + str = str.replace(/[\u041C]/g, 'M'); + str = str.replace(/[\u00D1\u0143\u0145\u0147\u014A\u041D]/g, 'N'); + str = str.replace(/[\u00D3\u014C\u014E\u0150\u041E]/g, 'O'); + str = str.replace(/[\u041F]/g, 'P'); + str = str.replace(/[\u0154\u0156\u0158\u0420]/g, 'R'); + str = str.replace(/[\u015A\u015C\u015E\u0160\u0421]/g, 'S'); + str = str.replace(/[\u0162\u0164\u0166\u0422]/g, 'T'); + str = str.replace(/[\u00D9\u00DA\u00DB\u00DC\u0168\u016A\u016C\u016E\u0170\u0172\u0423]/g, 'U'); + str = str.replace(/[\u0412]/g, 'V'); str = str.replace(/[\u0174]/g, 'W'); - str = str.replace(/[\u0176]/g, 'Y'); - str = str.replace(/[\u0179\u017B\u017D]/g, 'Z'); + str = str.replace(/[\u0176\u042B]/g, 'Y'); + str = str.replace(/[\u0179\u017B\u017D\u0417]/g, 'Z'); str = str.replace(/[\u00C6]/g, 'AE'); + str = str.replace(/[\u0427]/g, 'CH'); + str = str.replace(/[\u0425]/g, 'KH'); str = str.replace(/[\u0152]/g, 'OE'); + str = str.replace(/[\u0428]/g, 'SH'); + str = str.replace(/[\u0429]/g, 'SHH'); + str = str.replace(/[\u042F]/g, 'YA'); + str = str.replace(/[\u0404]/g, 'YE'); + str = str.replace(/[\u0407]/g, 'YI'); + str = str.replace(/[\u0401]/g, 'YO'); + str = str.replace(/[\u042E]/g, 'YU'); + str = str.replace(/[\u0416]/g, 'ZH'); str = str.toLowerCase();