Aliase entfernen ü

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Aliase entfernen ü

Beitrag von malsdgtac »

Hallo,

ich habe in der 4.9.0 nun wieder das Problem, dass ü in Alias nicht in ue umgewandelt sondern einfach entfernt werden.
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Aliase entfernen ü

Beitrag von homtata »

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.

Code: Alles auswählen

    if ($sourceEncoding != 'UTF-8') {
        $sString = utf8_decode($sString);
    }
Kommentiere ich den o.g. Zellblock komplett aus oder zumindest die mittlere Zeile:

Code: Alles auswählen

if ($sourceEncoding != 'UTF-8') {
        //$sString = utf8_decode($sString);
    }
- voilà, schon stimmt alles wieder!

Liebe Entwickler, bitte mal reinschauen.
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 15 Mal
Kontaktdaten:

Re: Aliase entfernen ü

Beitrag von Faar »

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:

Code: Alles auswählen

$sString=strtr($sString,$ersetzungsArray);
     return $sString; 

$ersetzungsArray= array(
"ü" => "ue", 
usw.,
);
Denke ich mal so.

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.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Aliase entfernen ü

Beitrag von Spider IT »

homtata hat geschrieben:Defitiniv ein Bug.
Dem muss ich so zustimmen, denn
homtata hat geschrieben:

Code: Alles auswählen

    if ($sourceEncoding != 'UTF-8') {
        $sString = utf8_decode($sString);
    }
kann schon rein logisch nicht richtig sein.
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é
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Aliase entfernen ü

Beitrag von homtata »

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
josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Aliase entfernen ü

Beitrag von josh »

Hallo,

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') {
Bei mir funktioniert das. Da ich nur noch nit utf8 mache wird es wohl kein Problem geben.

Viele Grüße

josh
Antworten