Hi!
[1] Benutze niemals fremede Funktionen, die Du nicht verstehst.
Ich verstehe die Funktion eigentlich schon. Sie wandelt erst die Zeichenkodierung zu UTF8, trennt dann die einzelnen Zeichen und ersetzt die, die nicht in der whitelist stehen durch deren Ascii-Code. Das die Leerzeichen im Parameter durch '+' ersetzt wurden anstatt durch '%20', liegt an urlencode().
Ich konnte den Fehler auch eingrenzen und zwar gibt die Funktion das erwartete Ergebnis zurück wenn ich die Zeile
$string = mb_convert_encoding($string_, "UTF-8", "7bit, UTF-7, UTF-8, UTF-16, ISO-8859-1, ASCII");
ändere in
$string = mb_convert_encoding($string_, "UTF-8");
Warum ändert sich das Ergebnis wenn die anderen Kodierungen expliziet angegeben werden? Ich teste lokal.
Hier wird gern geraten, den Blogbeitrag zum Thema Kontextwechsel zu lesen und zu beachten. Dedlfix hat sich sehr viel Mühe gegeben die Problematik umfassend zu erklären und das Resultat überzeugt.
Ich kenne die Problematik und sogar den Artikel aber die Funktion durch htmlspecialchars() zu ersetzen ändert ja nichts an dem Problem das ich mit der Funktion habe. Und htmlentities() scheidet aus den verlinkten Gründen aus.
Beste Grüße, Franzi