str_replace Umlaute ä, ö und ü

D

di-five

Hallo,

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

Hier mal der Quellcode:

PHP:
<?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.
 
Zuletzt bearbeitet von einem Moderator:
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
 
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

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

schreiben kann?
 
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:
PHP:
$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:
PHP:
function utf8_ucwords($str)
{
	$str = preg_replace('/(?<=[\p{Z}\p{P}])\p{Ll}/ue', 'mb_strtoupper("\\0")', $str);
	return $str;
}
 
Hallo,

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

Viele Grüße
di-five
 
Zurück