oder diesen Parameter und den folgenden vierten ganz weglassen, da sie optional sind und du anscheinend mit den Defaultwerten glücklich wirst.
Überhaupt erscheint mir die Angabe von " " als Trennzeichen ziemlich sinnlos, da wordwrap() den String an Leerzeichen trennt - wo liegt der Sinn, genau dort wieder ein Leerzeichen einzusetzen, wo vorher ein Leerzeichen war? Letztendlich bekommst du deinen String so unverändert wieder zurück.
Wie sehe dann in diesem Fall die neue Codezeile aus?
} elseif (strlen(html_entity_decode($ShoutPart, ENT_QUOTES)) > 21) {
> $ShoutNew[$i] = htmlspecialchars(wordwrap(html_entity_decode($ShoutPart, ENT_QUOTES), 21, " ", 1), ENT_QUOTES);