Stringlänge unterschiedlich, JS vs. PHP

  • Themenstarter Themenstarter ByeBye 251003
  • Beginndatum Beginndatum
B

ByeBye 251003

Hallo,

bei der Eingabe eines Strings in eine Textarea werden die Zeichen simultan mit JS mitgezählt und im Input mit dem Namen "remLen" ausgegeben. Das Problem ist nur, wenn der gleiche String danach mit u.g. php-Funktion (und allen anderen passenden Count PHP-Funktionen) untersucht wird, kommt eine andere Zeichenanzahl raus. Folgendes wurde getestet:

a)
Eingabe ein Zeichen, Cursor stoppt dahinter:
JS zählt 1 Zeichen
PHP zählt 1 Zeichen

b)
Eingabe ein Zeichen, danach Enter, also Cursor eine Zeile tiefer
JS zählt 2 Zeichen
PHP zählt 3 Zeichen

Kann mir jemand sagen, wie ich auf gleiche Ergebnisse komme? Hier die entsprechenden Funktionen:

mit PHP:
Code:
mb_strlen($anfrage);


mit JS: (aufs wesentliche reduziert)

Code:
$restzeichen = isset($_POST["remLen"])  ? $_POST["remLen"] : "1000";

function textCounter(field, countfield, maxlimit) {
  if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
  else
    countfield.value = maxlimit - field.value.length;
}


<input type="text" name="remLen" value="<? echo $restzeichen; ?>" />
 
<textarea  name="anfrage"
onkeydown ="textCounter (this.form.anfrage,this.form.remLen,<? echo $restzeichen; ?>);
onkeyup   ="textCounter (this.form.anfrage,this.form.remLen,<? echo $restzeichen; ?>);
><? echo $anfrage; ?></textarea>
 
Moin,

das kommt wahrscheinlich daher, dass du in deinem JS-Code nicht spezielle Unicode-Zeichen beachtest, aber in PHP schon.

Schau mal hier: Count bytes in textarea using javascript

Und versuche statt value.length folgendes Konstrukt zu nehmen:
Javascript:
encodeURIComponent(text).replace(/%[A-F\d]{2}/g, 'U').length

// bzw. als Funktion
function getRealStrLen(str) {
  return encodeURIComponent(str).replace(/%[A-F\d]{2}/g, 'U').length
}
 
Zurück