Мне нужно заменить акцентированные символы в строке их безакцентированными аналогами, и я реализовал это http://lehelk.com/2011/05/06/script-to-remove-diacritics/.
var defaultDiacriticsRemovalMap = [
{'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
/* ...
so on and so forth
.... */
];
var changes;
function removeDiacritics (str) {
if(!changes) {
changes = defaultDiacriticsRemovalMap;
}
for(var i=0; i<changes.length; i++) {
str = str.replace(changes[i].letters, changes[i].base);
}
return str.replace(/\s+/g, '_'); //space to dash
}
Это не работает в IE 7 и 8 (работает в любом другом браузере) с ошибкой 'changes[...].letters' is null or not an object
на линии str = str.replace(changes[i].letters, changes[i].base);
, и я понятия не имею, почему.Я имею в виду, я понимаю, что браузер думает, что он встретил нулевое значение, но я не вижу, как это может быть.
Я скопировал свой код в jsfiddle (он выдает ту же ошибку, что ихорошо) так что вы можете взглянуть на это.
http://jsfiddle.net/GggcU/