Sonderzeichen über String Index einfügen geht nich
Hallo zusammen,
ich hab folgendes Problem: $strTest = 'á'; // Sonderzeichen a mit Akzent echo $strTest; funktioniert einwandfrei, das Sonderzeichen 'á' wird korrekt dargestellt (mit charset="utf-8") Aber, folgendes funktioniert nicht: $strTest = 'hallo'; $strTest[1] = 'á'; // Sonderzeichen über String Index ersetzen echo $strTest; Jetzt wird das Sonderzeichen 'á' nicht mehr korrekt dargestellt, es erscheint 'h�llo' Weiß jemand, woran das liegt, bzw. wie man es korrigiert? Wenn ich es mit String-Operatoren mache, also "substr" etc, geht es auch. Ich würde aber eigentlich gerne den direkten Zugriff über den Index [] verwenden vielen Dank Helmut |
AW: Sonderzeichen über String Index einfügen geht nich
Also, ich glaub, ich hab es selbst gefunden.
Es geht nicht, da die Array-Notation für Strings nicht Multibyte-Aware ist. PHP unterscheidet zwischen normalen ASCII Zeichen (0..127) und Extended ASCII Zeichen (128..255). Für die Extended ASCIIs (und darüber hinausgehende Kodierungen (etwa utf-8) gibt es die Multibyte Funktionen. // So liefern die PHP Funktionen strLen und mb_strlen für nicht-extended ASCII Zeichen (0..127) den selben Wert: $strTest = 'abc'; echo 'out1 = ' .strlen($strTest) .'<br>'; // result = 3 echo 'out2 = ' .mb_strlen($strTest) .'<br>'; // result = 3 // Für extended ASCII Zeichen (128..255), liefern strLen und mb_strlen aber unterschiedliche Werte: $strTest = 'äöü'; echo 'out1 = ' .strlen($strTest) .'<br>'; // result = 6 (strlen zählt jetzt 2 Byte je Zeichen) echo 'out2 = ' .mb_strlen($strTest) .'<br>'; // result = 3 (Multibyte-Length bleibt bei drei Byte) Für Multibyte-Strings, kann man jetzt noch versuchen über die Array Notation 2 Bytes zu schreiben; für die normalen ASCIIs bekommt das hin (also z.B. $strTest[2] = ''; $strTest[3] = 'x'), aber für Sonderzeichen geht das schief. Also werde ich wohl alle meine strlen, strpos und substr etc. durch die entsprechenden mb-Varianten ersetzen. Wer das noch genauer wissen möchte, hier gibt es ein paar Links: http://www.sitepoint.com/working-wit...ibyte-strings/ http://stackoverflow.com/questions/9...-string-in-php http://iconoun.com/articles/collisions/ |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:31:53 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.