# str_replace Umlaute ä, ö und ü



## di-five (28. Oktober 2008)

Hallo,

ich möchte Umlaute mit str_replace ersetzen, nur leider funktioniert das nicht 

Hier mal der Quellcode:


```
<?php
    function text ($text) {

        $alt = array("-a", "-b", "-c", "-d", "-e", "-f", "-g", "-h", "-i", "-j", "-k", "-l", "-m", "-n", "-o", "-p", "-q", "-r", "-s", "-t", "-u", "-v", "-w", "-x", "-y", "-z",
                     "-&auml;", "-ö", '-ü',
                     " Der ", " Die ", " Das ", " Dem ", " Den ");
        $neu = array("-A", "-B", "-C", "-D", "-E", "-F", "-G", "-H", "-I", "-J", "-K", "-L", "-M", "-N", "-O", "-P", "-Q", "-R", "-S", "-T", "-U", "-V", "-W", "-X", "-Y", "-Z",
                     "-&Auml;", "-Ö", '-Ü',
                     " der ", " die ", " das ", " dem ", " den ");

        $text = str_replace($alt, $neu, $text);

        return $text;
    }
?>
```

Das funktioniert für -a, -b, " der " usw. nur leider nicht für die Umlaute.

Kann mir jemand sagen warum?

Ich wäre für Hilfe dankbar.

Viele Grüße
di-five

// Die Ausgabe wird anschließend in einer Datenbank gespeichert.


----------



## CookieBuster (28. Oktober 2008)

Maybe liegts am Inputtext, wenn hier die Umlaute "unformatiert" also wirklich als ö, ä und ü's rienkommen und nicht als &auuml-.... dann ist klas rass es net funktioniert.

Zeig doch mal wie der Text übergeben wird, dann kann man maybe mehr sagen


----------



## di-five (29. Oktober 2008)

Hi CookieBuster,

der Text wird via Formular-Methode *post* übergeben.

Auf php.net steht, dass für solche Fälle htmlentities benutzt werden muss bzw. benutzt werden kann, da man dort einen Zeichensatz einstellen kann.

Die Frage ist jetzt, wie kompliziert das zu realisieren ist.

Gibt es vielleicht eine alternative Funktion zu str_replace, wo man beispielsweise direkt


```
function_replace($alt, $neu, $text, "UTF-8");
```

schreiben kann?


----------



## hans jörg (29. Oktober 2008)

Hi,
vielleicht klappts wenn du vorher eine Einstellung mit http://at.php.net/manual/de/function.setlocale.php vornimmst

```
setlocale(LC_CTYPE, "de_DE");
```


----------



## Gumbo (29. Oktober 2008)

Wenn du UTF-8-Daten verarbeitest, solltest du das Skript selbst am besten auch in UTF-8 kodieren. Falls das nicht möglich ist, kannst du die UTF-8-Codes der jeweiligen Zeichen wie folgt schreiben:
	
	
	



```
$alt = array(/* … */ "-\xC3\xA4", "-\xC3\xB6", "-\xC3\xBC", /* … */);
$neu = array(/* … */ "-\xC3\x84", "-\xC3\x96", "-\xC3\x9C", /* … */);
```
(Die doppelten Anführungsstriche sind entscheidend!)

Einfacher wäre jedoch Folgendes:
	
	
	



```
function utf8_ucwords($str)
{
	$str = preg_replace('/(?<=[\p{Z}\p{P}])\p{Ll}/ue', 'mb_strtoupper("\\0")', $str);
	return $str;
}
```


----------



## di-five (2. November 2008)

Hallo,

vielen Dank für eure Antworten!
Ich werde das austesten, und melde dann das Ergebnis.

Viele Grüße
di-five


----------

