echo $begrüßung;
elseif(stripos(strrev($name), 's') === 0 && stripos(strrev($name), 's') === 1)
Diese Bedingungen wird nie wahr, da bei beiden stripos-Aufrufen das s an Postion 0 gefunden wird.
Wieso sollte die Funktion nicht wahr werden? Es ist für Wörter gedacht die auf "ss" enden.
stripos() findet das erste Vorkommen eines Zeichens. Und das ist bei einem mit s beginnenden String immer das Zeichen an Position 0, auch bei mehrfachen Aufrufen.
Der Teil stripos(strrev($name), 's') === 1 wird nicht wahr, weil das Ergebnis von stripos(...) === 0 ist.
return $name.''';
Das die Funktion den Namen wiedergibt, ist so gewollt, da sie Teil einer anderen Funktion ist die sich nur mit den Namen auseinandersetzt. Sie hat halt nur die eine Aufgabe.
Bei dir hat sie aber noch die zweite Aufgabe bekommen, Apostrophe als HTML-Entity zurückzuliefern. Und das ist normalerweise nicht die Aufgabe einer Daten verarbeitenden Funktion sondern von Funktionen, die sich um die Ausgabe kümmeren sollen.
Was den Tipp bezüglich des ß angeht muss ich noch einmal nachfragen. Wie genau hast du das gemeint?
Alle PHP-String-Funktionen arbeiten derzeit nach dem "1 Zeichen = 1 Byte"-Prinzip. Wenn du also von einem Wort mit ß am Ende selbiges haben willst, musst du entweder wissen, wieviel Bytes es lang ist, oder diese Angabe ermitteln lassen.
$len = strlen('ß') liefert bei einem UTF-8-kodierten ß [1] als Ergebnis den Wert 2. Du kannst nun $len als Parameter an substr() übergeben. Ab PHP 6 und aktivierter Multibyte-Unterstützung liefert strlen('ß') hingegen den Wert 1. Du musst als bei Verwendung von $len dein Script nicht ändern. Bei einer fest kodierten 2 müsstest du diese dann auf 1 ändern.
PHP kann auch jetzt schon einigermaßen mit Mehrbyte-Kodierungen umgehen, wenn die Multibyte String Functions verwendet werden, was aber bei den Providern nicht unbedingt[2] installiert ist.
[1] sprich: der Script-Quelltext muss UTF-8-kodiert vorliegen.
[2] ich schätze sogar eher auf selten bis gar nicht
echo "$verabschiedung $name";