Aliase entfernen ü
Aliase entfernen ü
Hallo,
ich habe in der 4.9.0 nun wieder das Problem, dass ü in Alias nicht in ue umgewandelt sondern einfach entfernt werden.
ich habe in der 4.9.0 nun wieder das Problem, dass ü in Alias nicht in ue umgewandelt sondern einfach entfernt werden.
Re: Aliase entfernen ü
Defitiniv ein Bug.
Passiert bei mir auch, und hat mich genervt, deshalb bin ich mal auf die Suche gegangen.
Der Fehler entsteht letztlich in der functions.api.string.php gleich oben in der ersten Funktion cApiStrReplaceDiacritics.
Ich nehmen an, dass bei mir der Wert für "sourceEncoding" intern nicht auf UTF-8 steht, obwohl der Client in UTF-8 läuft, und dann durch diese Funktion der Alias NOCHEINMAL umgeschrieben wird, so dass am Ende keine mit dem darunter folgenden Ersetzungsarray mehr passenden Werte erzeugt werden.
Kommentiere ich den o.g. Zellblock komplett aus oder zumindest die mittlere Zeile:
- voilà, schon stimmt alles wieder!
Liebe Entwickler, bitte mal reinschauen.
Passiert bei mir auch, und hat mich genervt, deshalb bin ich mal auf die Suche gegangen.
Der Fehler entsteht letztlich in der functions.api.string.php gleich oben in der ersten Funktion cApiStrReplaceDiacritics.
Ich nehmen an, dass bei mir der Wert für "sourceEncoding" intern nicht auf UTF-8 steht, obwohl der Client in UTF-8 läuft, und dann durch diese Funktion der Alias NOCHEINMAL umgeschrieben wird, so dass am Ende keine mit dem darunter folgenden Ersetzungsarray mehr passenden Werte erzeugt werden.
Code: Alles auswählen
if ($sourceEncoding != 'UTF-8') {
$sString = utf8_decode($sString);
}
Code: Alles auswählen
if ($sourceEncoding != 'UTF-8') {
//$sString = utf8_decode($sString);
}
Liebe Entwickler, bitte mal reinschauen.
-
- Beiträge: 1951
- Registriert: Sa 8. Sep 2007, 16:23
- Wohnort: Brandenburg
- Hat sich bedankt: 15 Mal
- Kontaktdaten:
Re: Aliase entfernen ü
Ich weiß nicht ob das so einfach ist, denn die Umwandlung von ü in ue ist eine eher deutsche Angelegenheit und der Vergleich von Zeichen in verschiedenen Charaktersätzen läuft oft genug schief.
Das utf8_decode() wandelt UTF-8 Daten in ISO-8859-1 um.
Sollte es tatsächlich utf-8 gewesen sein, dann würde aus einem utf-8 ü ein ISO-8859-1 ü werden. Aber an irgendeiner nachfolgenden Stelle sagt das Programm, dass ü nicht url-compatibel ist und wirft es raus.
Also wäre dann nicht dieser utf8_decode() schuld, sondern ein nachfolgender Code, der ü nicht mit ue ersetzt.
An irgendeiner Stelle muss es also noch sowas in der Art geben:
Denke ich mal so.
PS. Vielleicht könnte man den Ersatz von utf8_decode() mit inconv() überdenken, weil ersteres das €-Zeichen nicht enthält.
Das utf8_decode() wandelt UTF-8 Daten in ISO-8859-1 um.
Sollte es tatsächlich utf-8 gewesen sein, dann würde aus einem utf-8 ü ein ISO-8859-1 ü werden. Aber an irgendeiner nachfolgenden Stelle sagt das Programm, dass ü nicht url-compatibel ist und wirft es raus.
Also wäre dann nicht dieser utf8_decode() schuld, sondern ein nachfolgender Code, der ü nicht mit ue ersetzt.
An irgendeiner Stelle muss es also noch sowas in der Art geben:
Code: Alles auswählen
$sString=strtr($sString,$ersetzungsArray);
return $sString;
$ersetzungsArray= array(
"ü" => "ue",
usw.,
);
PS. Vielleicht könnte man den Ersatz von utf8_decode() mit inconv() überdenken, weil ersteres das €-Zeichen nicht enthält.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: Aliase entfernen ü
Dem muss ich so zustimmen, dennhomtata hat geschrieben:Defitiniv ein Bug.
kann schon rein logisch nicht richtig sein.homtata hat geschrieben:Code: Alles auswählen
if ($sourceEncoding != 'UTF-8') { $sString = utf8_decode($sString); }
In der ersten Zeile steht "Wenn es NICHT UTF-8 ist, dann".
Und in der zweiten Zeile dann "Wandle es AUS UTF-8 um".
Ich tippe mal darauf, dass hier (Zeile 2) eher utf8_encode() gemeint ist.
Gruß
René
Re: Aliase entfernen ü
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
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
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
Code: Alles auswählen
'Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', 'ß', 'Ã', 'À', 'Â', 'á', 'à ', 'â', 'É', 'È', 'Ê', 'é', 'è', 'ê', 'Ã', 'ÃŒ', 'ÃŽ', 'Ã', 'ì', 'î', 'Ó', 'Ã’', 'Ô', 'ó', 'ò', 'ô', 'Ú', 'Ù', 'Û', 'ú', 'ù', 'û'
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);
}
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
Re: Aliase entfernen ü
Hallo,
ich habe mir so geholfen:
Bei mir funktioniert das. Da ich nur noch nit utf8 mache wird es wohl kein Problem geben.
Viele Grüße
josh
ich habe mir so geholfen:
Code: Alles auswählen
//function cApiStrReplaceDiacritics($sString, $sourceEncoding = 'ISO-8859-1', $targetEncoding = 'ISO-8859-1') {
function cApiStrReplaceDiacritics($sString, $sourceEncoding = 'UTF-8', $targetEncoding = 'UTF-8') {
Viele Grüße
josh