Multibyte String Functions
Antman
- php
Guten Morgen Forum,
wie kann man ein ganzes Array von Western nach UTF-8 umwandeln.
$search = mb_convert_encoding(array("ä", "Ä", "ü", "Ü", "ö", "Ö", "ß"), "utf-8");
$replace = mb_convert_encoding(array("ae", "ae", "ue", "ue", "oe", "oe", "ss"), "utf-8");
while($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
$row['folder'] = str_replace($search, $replace, $row['folder']);
$employees[] = $row;
}
Bekomme immer die Notices:
Notice: Array to string conversion in D:\utf\classes\_project\den.class.php on line 70
Notice: Array to string conversion in D:\utf\classes\_project\den.class.php on line 71
Der konvertiert einfach nicht.
Folgendes geht auch nicht:
mb_internal_encoding("utf-8");
$search = array("ä", "Ä", "ü", "Ü", "ö", "Ö", "ß");
$replace = array("ae", "ae", "ue", "ue", "oe", "oe", "ss");
Hallo,
wie kann man ein ganzes Array von Western nach UTF-8 umwandeln.
$search = mb_convert_encoding(array("ä", "Ä", "ü", "Ü", "ö", "Ö", "ß"), "utf-8");
mb_convert_encoding erwartet als ersten Parameter eine String-Variable. Die Notices kommen, weil PHP automatisch in den Array in einen String umwandelt. Dabei kommt »Array« heraus (siehe echo(array('a', 'b', 'c'));), was letztlich dazu führt, dass nichts ersetzt wird.
Du müsstest also jedes Array-Element einzeln in UTF-8 umwandeln, zum Beispiel so:
$search = array('ä', 'Ä', 'ü', 'Ü', 'ö', 'Ö', 'ß');
foreach ($search as &$character) {
$character = utf8_encode($character);
}
Du kannst übrigens utf8_encode statt mb_convert_encoding nehmen. Die mbstring-Erweiterung von PHP ist nicht immer verfügbar.
$replace = mb_convert_encoding(array("ae", "ae", "ue", "ue", "oe", "oe", "ss"), "utf-8");
Da diese Zeichen aus ASCII stammen, brauchen sie nicht gesondert umkodiert werden, weil die Zeichenpositionen in UTF-8 und der ISO-Kodierung, die dein PHP-Script wahrscheinlich verwendet, identisch sind.
Alternativ kannst du dein Script auch direkt in UTF-8 schreiben.
Mathias
Hallo Molili,
mb_convert_encoding erwartet als ersten Parameter eine String-Variable. Die Notices kommen, weil PHP automatisch in den Array in einen String umwandelt. Dabei kommt »Array« heraus (siehe echo(array('a', 'b', 'c'));), was letztlich dazu führt, dass nichts ersetzt wird.
Jo, habe ich auch schon rausgefunden.
Du müsstest also jedes Array-Element einzeln in UTF-8 umwandeln, zum Beispiel so:
$search = array('ä', 'Ä', 'ü', 'Ü', 'ö', 'Ö', 'ß');
foreach ($search as &$character) {
$character = utf8_encode($character);
}
Super, danke. Aber warum verwendest du das & vor $character ?
Du kannst übrigens utf8_encode statt mb_convert_encoding nehmen. Die mbstring-Erweiterung von PHP ist nicht immer verfügbar.
Werde ich mal versuchen.
$replace = mb_convert_encoding(array("ae", "ae", "ue", "ue", "oe", "oe", "ss"), "utf-8");
Da diese Zeichen aus ASCII stammen, brauchen sie nicht gesondert umkodiert werden, weil die Zeichenpositionen in UTF-8 und der ISO-Kodierung, die dein PHP-Script wahrscheinlich verwendet, identisch sind.
Stimmt natürlich. Habe ich in der Verwirrung total vergessen.
Alternativ kannst du dein Script auch direkt in UTF-8 schreiben.
Jaaaaaaaaa!! Oh mann, ich hatte gehofft du würdest das sagen. Bei mir ist eh alles in unicode in der DB und in den Schablonen. Sag mir wie? Ich benutze Dreamweaver. Wie kann ich php code als unicode speichern? Ist mir schleierhaft. Dann bräuchte man die ganzen multibyte Funktionen ja garnicht, oder ?
Hi,
Jaaaaaaaaa!! Oh mann, ich hatte gehofft du würdest das sagen. Bei mir ist eh alles in unicode in der DB und in den Schablonen. Sag mir wie? Ich benutze Dreamweaver. Wie kann ich php code als unicode speichern? Ist mir schleierhaft. Dann bräuchte man die ganzen multibyte Funktionen ja garnicht, oder ?
Dreamweaver MX?
Voreinstellungen > Neues Dokument
- Standarderweiterung: Unicode (UTF-8)
kein Haken bei [ ] Unicodesignatur (BOM) einfügen
sollte es tun.
CirTap
Dreamweaver MX?
Ja.
Voreinstellungen > Neues Dokument
- Standarderweiterung: Unicode (UTF-8)
kein Haken bei [ ] Unicodesignatur (BOM) einfügen
Ja, so habe ich das seit kurzen bei allen Templates gemacht. Dachte das würde sich nur auf Dokumente beziehen, die an den Benutzer geschickt werden. Nun habe ich aber alle Dokumente nach UTF konvertiert und nun geht garnichts mehr. Nun machen die Sessions Probleme. Leerteichen werden nun in wirren Zeichen ausgegeben so dass diese vor den Sessions erzeugt und ausgegeben werden. Dann kommt immer die Fehlermeldung "header already sent".
Hallo,
$search = array('ä', 'Ä', 'ü', 'Ü', 'ö', 'Ö', 'ß');
foreach ($search as &$character) {
$character = utf8_encode($character);
}Super, danke. Aber warum verwendest du das & vor $character ?
Weil sonst der Array nicht geändert wird. Bei einer foreach-Schleife wird für gewöhnlich der Wert des jeweiligen Elements kopiert und hier in $character gespeichert. Wenn dann $character geändert wird, wird nur eben diese Variable geändert. Das Array-Element an sich bliebe unangetastet. Durch das &$character ist $character eine Referenz (http://de3.php.net/manual/de/language.references.php) auf das jeweilige Array-Element. Wenn dann $character geändert wird, ändert sich auch das Array-Element.
Für gewöhnlich durchläuft man Arrays mit einer for-Schleife:
for ($i = 0; $i < count($search); i++)
$search[$i] = utf8_encode($search[$i]);
Die besagte foreach-Schleife ist eine elegante Variante, die zumindest äußerlich ohne Zählvariable auskommt.
Mathias