Zeichen zählen - Problem mit Umlauten
Pauer
- javascript
Hallo,
ich habe ein TinyMCE-Feld, bei dem ich die Zeichen zähle und auf 500 Zeichen begrenze. Das funktioniert, nur werden bspw. Umlaute als 6 Zeichen gezählt. Alle Dateien sind UTF-8.
Wie kann ich es erreichen, dass die Umlaute nur als ein Zeichen gezählt werden?
Gruß Pauer
tinymce.init({
selector: "#description",
toolbar: "bold italic underline",
menubar : false,
statusbar : false,
// count and display numnber of chars
setup : function(ed) {
ed.on('keydown', function(evt) {
var tinylen,
remaining,
maxlength = $("#" + tinyMCE.activeEditor.id).attr("maxlength");
if (maxlength) {
tinylen = ed.getContent().replace(/(<([^>]+)>)/ig,"").length;
remaining = (maxlength - tinylen) >= 0 ? (maxlength - tinylen) : 0 ;
if (tinylen > maxlength-1) {
// allow only following keys:
if(evt.keyCode != 8 // backspace
&& evt.keyCode != 16 // shift
&& evt.keyCode != 17 // ctrl
&& evt.keyCode != 18 // alt
&& evt.keyCode != 37 // left arrow
&& evt.keyCode != 38 // up arrow
&& evt.keyCode != 39 // right arrow
&& evt.keyCode != 40 // down arrow
&& evt.keyCode != 46) { // delete
return tinymce.dom.Event.cancel(evt);
}
}
if(remaining != 500 && remaining!= 0)
remaining -=1;
$('.cnt-chars span').text(remaining);
}
});
},
});
Mahlzeit,
nur werden bspw. Umlaute als 6 Zeichen gezählt. Alle Dateien sind UTF-8.
Ich gehe mal davon aus, die Umlaute werden in Entities umgewandelt, also Ä => Ä
Versuch mal ein
entity_encoding : "raw",
in der Config von tinymce
Hallo,
Versuch mal ein
entity_encoding : "raw",
in der Config von tinymce
Man, man, man, danke das wars, Wald und Bäume und so...
Gruß Pauer
Hallo,
Alle Dateien sind UTF-8.
Das spielt eigentlich keine Rolle mehr, wenn erst einmal alle Dateien eingelesen sind.
tinylen = ed.getContent().replace(/(<([^>]+)>)/ig,"").length;
Strings in JavaScript sind echte Ketten von Unicode-Zeichen, sie stellen deutsche Umlaute problemlos in einem Zeichen da.
"ö".length → 1
Problematisch wird das erst mit Zeichen außerhalb des Basic Multilingual Plane von Unicode:
http://mathiasbynens.be/notes/javascript-unicode
Dann ist der Wert von length ggf. inkorrekt.
Ich weiß natürlich nicht, was TinyMCE in getContent macht. Vielleicht wird ö durch ö ersetzt? Schau dir den String einmal an, werden da irgendwelche Ersetzungen vorgenommen?
Mathias
@@molily:
nuqneH
Strings in JavaScript sind echte Ketten von Unicode-Zeichen, sie stellen deutsche Umlaute problemlos in einem Zeichen da.
"ö".length → 1
"ö".length → 2
Problematisch wird das erst mit Zeichen außerhalb des Basic Multilingual Plane von Unicode
Nö, das schon in der BMP problematisch.
Dann ist der Wert von length ggf. inkorrekt.
Was er ggf. schon für Zeichen der BMP ist. Wobei man erstmal definieren müsste, was für "ö" (o U+0308 COMBINING DIAERESIS) denn nun korrekt wäre: 1 oder 2. (Normalisierung)
Qapla'
Hallo,
Problematisch wird das erst mit Zeichen außerhalb des Basic Multilingual Plane von Unicode:
http://mathiasbynens.be/notes/javascript-unicodeNö, das schon in der BMP problematisch.
Das ist richtig. Das erklärt der Link, den ich aus Gründen gesetzt hatte und den du aus dem Zitat entfernt hast, auch in epischer Breite. Ich habe ihn in obigem Zitat noch einmal ergänzt. Ich hatte nicht den Anspruch, die Problematik in 12 Wörtern wiederzugeben. Als ich von deutschen Umlauten sprach, dann bezog ich mich auf einzelne, nicht zusammengesetzte Unicode-Zeichen wie U+00F6.
Mathias