zu Faar: genau DAS was du beschreibst, macht diese Funktion. Sie ersetzt die Sonderzeichen, allerdings will sie partout vorher alle Strings in utf8 bringen. Die Zeile
Code: Alles auswählen
'Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', 'ß', 'Ã', 'À', 'Â', 'á', 'à ', 'â', 'É', 'È', 'Ê', 'é', 'è', 'ê', 'Ã', 'ÃŒ', 'ÃŽ', 'Ã', 'ì', 'î', 'Ó', 'Ã’', 'Ô', 'ó', 'ò', 'ô', 'Ú', 'Ù', 'Û', 'ú', 'ù', 'û'
entspricht den utf8-Werten von ü ö ä usw.
Hey Spider,
das mit utf8_encode hatte ich sogar probiert, funktionert aber nicht... ich vermute eher, dass der Wert von $sourceEncoding in diesem Fall einfach nicht die zum übergebenen String passende Codierungsinfo enthält - vielleicht wird er der Funktion nicht mit übergeben und wie wir im Aufruf sehen, wird der auf iso gesetzt, ist dann natürlich nicht utf8, obwohl er es in Wahrheit eventuell ist.
Neue Variante: Wenn man den Code entsprechend ändert
Code: Alles auswählen
function cApiStrReplaceDiacritics($sString, $sourceEncoding = '', $targetEncoding = 'ISO-8859-1') {
if ($sourceEncoding != '' && $sourceEncoding != 'UTF-8') {
$sString = utf8_encode($sString);
}
also oben die Grundzuweisung für $sourceEncoding auf leer setzt und die auskommentierte Zeile wieder reinnimmt, führt das ebenso zum gewünschten Verhalten. Jetzt prüft man noch, ob der Wert für sourceEndoding überhaupt gesetzt wurde und von utf-8 abweicht, sonst wird nicht umgewandelt. Und ja, "decode" ist m.E. auch quatsch. Es MUSS logischerweise "encode" sein bei dieser Abfrage.
Fazit: solange die Funktion nicht immer mit allen Parametern aufgerufen wird, führt das früher oder später zu Käse.
Wahrscheinlich ist die Änderung hier nur Rumgefummel - es müsste die Stelle beim Speichern der Kategorienamen gefunden werden, die dann am Ende diese Funktion hier benutzt. DORT müsste m.E. der korrekte Zeichensatz mitübergeben werden!
LG