Doktor Knallcharge: Unterschiedliche Stringlängen PHP/JavaScript nach Definition?

Beitrag lesen

gut, ich bin noch nicht geblockt und kann ein weiteres Problem publik machen :-)

Hier wurde noch nie jemand geblockt. Das war auch nicht nötig, die meisten sind vor lauter Hohn und Spott von alleine geflohen.

Ich habe mir dann mal die Stringlängen ausgeben lassen und habe festgestellt, dass der in PHP definierte String $Original = "Öde und unsinnig!" nicht 17 Zeichen lang, sondern länger ist, der in einer anderen Datei über Ajax geholte String aber die richtige Länge hat.

Codierung ist jeweils UFT-8.

Woran liegt es/kann es liegen?

PHP verarbeitet keine Zeichen, sondern Bytes. Javascript hingegen verarbeitet Zeichen, keine Bytes.

Zeichen werden vom Computer nicht als Zeichen gespeichert, sondern als Zahlen, die ihrerseits auf Schriftzeichen in einer Tabelle verweisen. US-ASCII, die ISO-8859-Familie und auch Unicode sind solche Tabellen. US-ASCII umfasst 128 Werte, die 8859-Familie umfasst mehrere Tabellen à 256 Zeichen, Unicode wiederum definiert eine Tabelle mit Hundertausenden Schriftzeichen.

Ein Byte kann 256 verschiedene Werte aufnehmen. Da sich die Menschheit aber mehr als 256 Schriftzeichen ausgedacht hat, muss entweder der Zeichensatz beschränkt werden (US-ASCII, 8859-Familie) oder die größeren Werte müssen bei Bedarf irgendwie auf Bytes (oder andere Wortlängen) runtergebrochen werden.

Bedarf für Letzteres ist dort, wo zum Beispiel Programmiersprachen mit Konzepten aus der Steinzeit der Meinung sind, ein Zeichen entspräche immer einem Byte. In solchen Fällen kommt dann eine Kodierungen wie utf-8 zum Einsatz. utf-8 kann auch sehr große Werte so in ein oder mehrere Bytes verpacken, dass kein greises Programm sich daran verschluckt.

Dummerweise ist es natürlich so, dass ein derart tatteriges Programm sich bei solcherart kodierten Zeichenketten verzählt. Das ist dann Pech, aber ich bin mir sicher, PHP hat auch dafür irgendeine Ich-klopp'-dich-bis-es-passt-Funktion parat.