Hallo,
ich möchte folgende Funktion verwenden:
Diese Funktion wandelt kleingeschriebene Wörter in Wörter um, die mit einem Großbuchstaben beginnen; ausgenommen Wörter, die zum Anfang in der Variable $all_lowercase angegeben sind (bspw. soll das "von der" in dem Nachnamen "von der Leyen" klein geschrieben bleiben).
Funktioniert auch hervorragend, allerdings gibt es ein Problem:
Ich gebe der Funktion einen beispielhaften Wert (täve):
Der Aufruf der Funktion my_ucwords mit anschließender Ausgabe mit echo
ergibt TäVe. Das kleine "t" am Wortanfang wurde ordnungsgemäß in ein großes "T" gewandelt. ABER: nach dem Umlaut "ä" steht nun ein großes "V". Dieses Problem tritt auch bei Namen mit den Buchstaben "ö", "ü" oder "ß" auf. Woran liegt es, dass der Buchstabe nach dem Umlaut plötzlich groß geschrieben wird.
Kann mit bitte jemand bei der Lösung dieses Problems behilflich sein? Vielen Dank im Voraus!
ich möchte folgende Funktion verwenden:
PHP-Code:
function my_ucwords($str, $is_name=false) {
// exceptions to standard case conversion
if ($is_name) {
$all_uppercase = '';
$all_lowercase = 'De La|De Las|Der|Van De|Van Der|Vit De|Von|Or|And|Von Der|';
} else {
// addresses, essay titles ... and anything else
$all_uppercase = 'Po|Rr|Se|Sw|Ne|Nw';
$all_lowercase = 'A|And|As|By|In|Of|Or|To';
}
$prefixes = 'Mc|Dr';
$suffixes = "'S";
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
// captialize all first letters
$str = preg_replace('/\\b(\\w)/e', 'strtoupper("$1")', strtolower(trim($str)));
if ($all_uppercase) {
// capitalize acronymns and initialisms e.g. PHP
$str = preg_replace("/\\b($all_uppercase)\\b/e", 'strtoupper("$1")', $str);
}
if ($all_lowercase) {
// decapitalize short words e.g. and
if ($is_name) {
// all occurences will be changed to lowercase
$str = preg_replace("/\\b($all_lowercase)\\b/e", 'strtolower("$1")', $str);
} else {
// first and last word will not be changed to lower case (i.e. titles)
$str = preg_replace("/(?<=\\W)($all_lowercase)(?=\\W)/e", 'strtolower("$1")', $str);
}
}
if ($prefixes) {
// capitalize letter after certain name prefixes e.g 'Mc'
$str = preg_replace("/\\b($prefixes)(\\w)/e", '"$1".strtoupper("$2")', $str);
}
if ($suffixes) {
// decapitalize certain word suffixes e.g. 's
$str = preg_replace("/(\\w)($suffixes)\\b/e", '"$1".strtolower("$2")', $str);
}
return $str;
}
Funktioniert auch hervorragend, allerdings gibt es ein Problem:
Ich gebe der Funktion einen beispielhaften Wert (täve):
Code:
$name = "täve";
Code:
$neuername = my_ucwords($name, true); echo $neuername;
Kann mit bitte jemand bei der Lösung dieses Problems behilflich sein? Vielen Dank im Voraus!
Kommentar