Suchfunktion (&DB?) scheitert bei bestimmten Sonderzeich
Suchfunktion (&DB?) scheitert bei bestimmten Sonderzeich
Hi,
ich habe folgendes Problem endeckt, welches bei meiner aktuellen Contenido Version 4.6.23 sowie bei meiner alten Version 4.6.15 auftaucht:
Beim Speichern der Artikel bzw. beim Indizieren der Texte werden die Suchbegriffe in die Tabelle con_keywords in Kleinbuchstaben gespeichert.
Da ich meine website auch in französisch anbiete, wird z.Bsp. das Wort dégazage (html entities: dégazage) verwendet und ganz normal in Kleinbuchstaben in der DB gespeichert. Bei mehrfacher Benutzung dieses Wortes stehen dann natürlich die jeweiligen Treffer dazu in con_keywords. Die Suchfunktion spuckt soweit alle Treffer richtig aus.
Sobald ich aber das Sonderzeichen groß schreibe, also z.Bsp. im Wort DÉGAZAGE (html entities: DÉGAZAGE) wird ein neues Wort in con_keywords
erzeugt welches aber zu meiner Verwunderung einen Großbuchstaben enthält: dÉgazage !!!
Ab diesen Zeitpunkt spuckt die Suchfunktion in Contenido nicht mehr alle Treffer mit dégazage aus, auch nicht die, die danach ganz neu angelegt worden sind!!! Nach dem ich das Wort mit dem Großbuchstaben per Hand aus con_keywords gelöscht habe, werden wieder alle Suchergebnisse angezeigt. Natürlich holt mich das Problem wieder ein, sobald ein anderer Redakteur wieder das Wort DÉGAZAGE irgendwo speichert.
Ist das mit der Übernahme der GROßEN html-Sonderzeichen in die DB ein BUG von Contenido oder kann ich das Problem irgendwie selber lösen?
Danke schon mal für eure Mithilfe!
ich habe folgendes Problem endeckt, welches bei meiner aktuellen Contenido Version 4.6.23 sowie bei meiner alten Version 4.6.15 auftaucht:
Beim Speichern der Artikel bzw. beim Indizieren der Texte werden die Suchbegriffe in die Tabelle con_keywords in Kleinbuchstaben gespeichert.
Da ich meine website auch in französisch anbiete, wird z.Bsp. das Wort dégazage (html entities: dégazage) verwendet und ganz normal in Kleinbuchstaben in der DB gespeichert. Bei mehrfacher Benutzung dieses Wortes stehen dann natürlich die jeweiligen Treffer dazu in con_keywords. Die Suchfunktion spuckt soweit alle Treffer richtig aus.
Sobald ich aber das Sonderzeichen groß schreibe, also z.Bsp. im Wort DÉGAZAGE (html entities: DÉGAZAGE) wird ein neues Wort in con_keywords
erzeugt welches aber zu meiner Verwunderung einen Großbuchstaben enthält: dÉgazage !!!
Ab diesen Zeitpunkt spuckt die Suchfunktion in Contenido nicht mehr alle Treffer mit dégazage aus, auch nicht die, die danach ganz neu angelegt worden sind!!! Nach dem ich das Wort mit dem Großbuchstaben per Hand aus con_keywords gelöscht habe, werden wieder alle Suchergebnisse angezeigt. Natürlich holt mich das Problem wieder ein, sobald ein anderer Redakteur wieder das Wort DÉGAZAGE irgendwo speichert.
Ist das mit der Übernahme der GROßEN html-Sonderzeichen in die DB ein BUG von Contenido oder kann ich das Problem irgendwie selber lösen?
Danke schon mal für eure Mithilfe!
Zusatz:
Habe gerade noch probiert im Quelltext den html-Unicode &RAUTE201; (RAUTE=# ) anstatt É zu verwenden. Aber leider wandelt Contenido den Unicode wieder in É um. 

hmm... auf die schnelle lösbar... denke nicht...
ein bug ist das auf alle fälle...
ich verschieb das mal...
ein bug ist das auf alle fälle...
ich verschieb das mal...
*** make your own tools (wishlist :: thx)
Workaround:
Die Umsetzung der Entities erfolgt, soweit ich das reproduzieren konnte, durch Tiny.
Dieser lässt sich aber auch davon abbringen: http://wiki.moxiecode.com/index.php/Tin ... y_encoding
In den System/Mandanten-einstellungen einen neuen Wert anlegen mit:
tinymce | entity_encoding | numeric
dann wirft Tiny nur noch Unicode-Entities aus, und die werden offenbar korrekt von der Indizierung verarbeitet.
Die Umsetzung der Entities erfolgt, soweit ich das reproduzieren konnte, durch Tiny.
Dieser lässt sich aber auch davon abbringen: http://wiki.moxiecode.com/index.php/Tin ... y_encoding
In den System/Mandanten-einstellungen einen neuen Wert anlegen mit:
tinymce | entity_encoding | numeric
dann wirft Tiny nur noch Unicode-Entities aus, und die werden offenbar korrekt von der Indizierung verarbeitet.
Bis dann
Tono
Tono
ich bin der meinung, im französischen würde man auf grossbuchstaben keine auszeichnungen verwenden. aber das problem dürfte daran liegen, dass tiny bereits eine umsetzung in htmlentities vornimmt. bevor man nun kleinbuchstaben daraus macht, müsste man es zurückwandeln in normalbuchstaben.
ich frage mich bei dieser gelegenheit sowieso, was die umsetzung in kleinbuchstaben in der praxis bringt. mysql unterscheidet bei der suche nicht zwischen gross- und kleinbuchstaben.
ich frage mich bei dieser gelegenheit sowieso, was die umsetzung in kleinbuchstaben in der praxis bringt. mysql unterscheidet bei der suche nicht zwischen gross- und kleinbuchstaben.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Danke tono, das mit der html-Unicode Umwandlung klappt wirklich.tono hat geschrieben:In den System/Mandanten-einstellungen einen neuen Wert anlegen mit:
tinymce | entity_encoding | numeric
ABER: mein Problem ist immer noch da. Der Großbuchstabe wird wieder in der DB gespeichert (eben als dÉgazage) und kickt, wenn einmal vorhanden, alle anderen vorherigen Suchergebnisse von dégazage aus der DB!!!
Es ist zum Mäusemelken! Neue Artikel mit dem Wort dégazage werden leider nicht mehr in con_keywords geschrieben, solange noch der Eintrag dÉgazage vorhanden ist.

-
- Beiträge: 23
- Registriert: Mi 12. Dez 2007, 19:02
- Kontaktdaten:
die umwandlung hängt von der locale ab. folgendes sollte schon ausreichen:
Code: Alles auswählen
strtr(strtolower($str), '[ĄĆĘŁŃÓŚŹŻ]', '[ąćęłńóśźż]')
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Wo muss ich diese Anweisung am besten einbauen?kummer hat geschrieben:Code: Alles auswählen
strtr(strtolower($str), '[ĄĆĘŁŃÓŚŹŻ]', '[ąćęłńóśźż]')
Ich würde sagen das muss in classes/class.search.php Zeile 295 damit es erstmal funktioniert, aber ich weiß nicht ob das des rechte Platz für eine Dauerlösung ist.
strtolower steht dort schon fehlt nur noch das strtr().
Übrigens war der Fehler dem Autor wohl schon bewusst, siehe class.search.php Zeilen 456-457 removeSpecialChars()
strtolower steht dort schon fehlt nur noch das strtr().
Übrigens war der Fehler dem Autor wohl schon bewusst, siehe class.search.php Zeilen 456-457 removeSpecialChars()
Code: Alles auswählen
# TODO: The transformation of accented characters must depend on the selected encoding of the language of a client
# and should not be treated in this method.
Bis dann
Tono
Tono