Julius: aus Ö wird �

Beitrag lesen

Hallo Juergen,

in meinem Dokumet steht

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Wenn du (sinnvollerweise) den HTML5-Doctypes <!doctype html> benutzt, könntest du auch <meta charset="utf-8"> benutzen, das ist äquivalent und kürzer.

in meinem $string ='Österreich';

$array_1 = array('oe','ae','ue','oe','ae','ue','ss'); $array_2 = array('ö','ä','ü','Ö','Ä','Ü','ß');

for ($x = 0; $x < 7; $x++) { $string = str_replace($array_1[$x], $array_2[$x], $string); } $string =strtolower($string); $string=preg_replace ( '/[^a-zäÄöÖüÜß0-9_-]/i', '',$string);

strtolower() funktioniert nur für ASCII-Zeichen. Unabhängig von deinem Kodierungsproblem empfiehlt sich die Verwendung von mb_strtolower(), Beispiel:

echo mb_strtolower('ÖsteRReicH'); // österreich
echo strtolower('ÖsteRReicH'); // Österreich

�sterreich

Das deutet stark darauf hin, dass dein Script mit einer Kodierung gespeichert wurde, die nur ein Byte zur Kodierung benutzt (wie TS schon schrieb), wie beispielsweise ISO-8859-1 oder -15 abgespeichert wurde, weil dann Bytesequenzen auftauchen können (das Ö), die in UTF-8 keine Gültigkeit besitzen, daher das Ersetzungszeichen �. Anders herum würdest du Ö erhalten (das Ö wird in UTF-8 mit zwei Bytes kodiert, die in einer Ein-Byte-Kodierung wie ISO-8859-1 anders interpretiert werden als in UTF-8).

Gruß
Julius