phpbar.de logo

Mailinglisten-Archive

[php] ASCII <-> Ansi Problem?

[php] ASCII <-> Ansi Problem?

Martin Schepers php_(at)_phpcenter.de
Sat, 7 Sep 2002 14:24:49 +0200


Hallo Liste,

ich erzeuge mit PHP aus mysql-Datensätzen eine TXT-Datei, die
vom Win2000-FTP-Client im ASCII-Modus runtergeladen und dann
von einem DOS Programm weiterverarbeitet wird.

Das Problem liegt in den Umlauten, ein "Klüber" wird z.B. zu
"Kl³ber" usw. (in DOS mit "type" angezeigt).

Der DOS-Mensch meint, ich würde die Daten im Ansi-Format anliefern.


Mein erster Lösungsansatz funktioniert insoweit, dass ein "ss"
ersetzt wird, aber immer noch keine Umlaute:

$row = array(
    "name1" => "Müller",
    "name2" => "Klüber",
    "str" => "Straße"
);

print "<pre>";
print_r($row);

foreach($row as $key => $val) {
    $row[$key] = ereg_replace ("ä", "ae", $val);
    $row[$key] = ereg_replace ("ö", "oe", $val);
    $row[$key] = ereg_replace ("ü", "ue", $val);
    $row[$key] = ereg_replace ("Ä", "Ae", $val);
    $row[$key] = ereg_replace ("Ö", "Oe", $val);
    $row[$key] = ereg_replace ("Ü", "Ue", $val);
    $row[$key] = ereg_replace ("ß", "ss", $val);
  }

print_r ($row);


Ausgabe:

Array
(
    [name1] => Müller
    [name2] => Klüber
    [str] => Straße
)
Array
(
    [name1] => Müller
    [name2] => Klüber
    [str] => Strasse
)




Der zweite Lösungsansatz besteht darin, die Umlaute durch
ASCII-Codes zu ersetzen:


$ascii_ae = sprintf("%c", 132);
$ascii_oe = sprintf("%c", 148);
$ascii_ue = sprintf("%c", 129);
$ascii_Ae = sprintf("%c", 142);
$ascii_Oe = sprintf("%c", 153);
$ascii_Ue = sprintf("%c", 154);
$ascii_ss = sprintf("%c", 225);

$row = array(
    "name1" => "Müller",
    "name2" => "Klüber",
    "str" => "Straße"
);

print "<pre>";
print_r($row);

foreach($row as $key => $val) {
    $row[$key] = ereg_replace ("ä", $ascii_ae, $val);
    $row[$key] = ereg_replace ("ö", $ascii_oe, $val);
    $row[$key] = ereg_replace ("ü", $ascii_ue, $val);
    $row[$key] = ereg_replace ("Ä", $ascii_Ae, $val);
    $row[$key] = ereg_replace ("Ö", $ascii_Oe, $val);
    $row[$key] = ereg_replace ("Ü", $ascii_Ue, $val);
    $row[$key] = ereg_replace ("ß", $ascii_ss, $val);
  }

print_r ($row)


Ausgabe:

Array
(
    [name1] => Müller
    [name2] => Klüber
    [str] => Straße
)
Array
(
    [name1] => Müller
    [name2] => Klüber
    [str] => Straáe
)



Auch hier werden die Umlaute erst gar nicht gefunden und ob das
ß so richtig "übersetzt" wurde bezweifel ich auch...

Was tun?

Martin


php::bar PHP Wiki   -   Listenarchive