Suche auf Kyrillisch geht nicht

Gesperrt
pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Suche auf Kyrillisch geht nicht

Beitrag von pauls » Mo 1. Mär 2010, 22:28

Ich habe eine Webseite aud Kyrillisch erstellt. Aber aus irgeneinem Grund funktioniert die Suche nicht. Wenn ich die Zahlen auf der Seite Suche, dann geht das, aber wenn ich etwas mit kyrillischen Buchstaben in dem Suchfeld eintippe, dann findet die Suche nichts. Das liegt vielleicht an die Kodierung beim eintippen. Wo kann man das einstellen? Hat jemand was ähnliches gehabt?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Mo 1. Mär 2010, 23:10

Hallo pauls,

ist auch sichergestellt, dass alle Bereiche mit dem gleichen Encoding arbeiten? Encoding der Seite und Encoding der DB-Verbindung sollten gleich sein.

Du kannst auch im form-Tag zusätzlich das accept-charset Attribut angeben, z. B. mit accept-charset="UTF-8", falls du mit UTF-8 arbeitest.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Di 2. Mär 2010, 08:24

Danke für die Antwort. Wo befinden sich diese Spracheinstellungen?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Di 2. Mär 2010, 12:02

Hallo pauls,

warte, bevor ich dich auf die falsche Fährte schicke...

Die Modulausgabe der Suche "Search_Output" könnte auch die Ursache sein. Dort wird der eingegebene Text mit htmlentities() umgewandelt. Diese Funktion verwendet per default ISO-8859-1. Du kannst der Funktion den aktuell verwendeten Zeichensatz übergeben.

Ändere dazu die Zeilen

Code: Alles auswählen

if (isset ($_GET['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm']))));
}
elseif (isset ($_POST['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_POST['searchterm']))));
}
in

Code: Alles auswählen

if (isset ($_GET['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm'])), ENT_COMPAT, $encoding[$lang]));
}
elseif (isset ($_POST['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_POST['searchterm'])), ENT_COMPAT, $encoding[$lang]));
}
Vielleicht löst das schon dein Problem. Du kannst auch die Variable testhalber mit echo $searchterm; ausgeben, um zu sehen, ob das, was an die DB geschickt wird, auch in ordnung ist.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Di 2. Mär 2010, 13:15

xmurrix hat geschrieben:
Vielleicht löst das schon dein Problem. Du kannst auch die Variable testhalber mit echo $searchterm; ausgeben, um zu sehen, ob das, was an die DB geschickt wird, auch in ordnung ist.
Danke. Ich habe das mit dem Code probiert. Das ändert nichts. Aber was ich merke ist wenn ich ein Zahl in Suchfeld eingebe funktioniert die Suche, aber die Worte, die mit Zahlen gezeigt werden kommen in einer komischen Kodierung. Also vielleicht das has echt mit Kodierung was zu tun.

Mit "echo $searchterm" verstehe ich nicht was mann machen soll. Wie macht man das genau? Danke im Voraus.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Di 2. Mär 2010, 14:23

Die Variable kannst du folgendermaßen ausgeben:

Code: Alles auswählen

if (isset ($_GET['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm'])), ENT_COMPAT, $encoding[$lang]));
}
elseif (isset ($_POST['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_POST['searchterm'])), ENT_COMPAT, $encoding[$lang]));
}
// ausgabe der variable
echo "<pre>$searchterm</pre>"; 
Versuche auch festzustellen, ob die Eingabe überhaupt korrekt ankommt. In der Modulausgabe von "Search_Output" folgende Zeilen einfügen:

Code: Alles auswählen

if (isset ($_GET['searchterm'])) {
    $testsearchterm = $_GET['searchterm'];
} elseif (isset ($_POST['searchterm'])) {
    $testsearchterm = $_POST['searchterm'];
}
// ausgabe der testvariable
echo "<pre>$testsearchterm</pre>"; 
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Di 2. Mär 2010, 19:04

Danke. Beide Sachen funktionieren gut. Ich sehe zwei mal das richtige Suchwort in normaler Kodierung. Was kann man noch probieren?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Mi 3. Mär 2010, 12:14

Es gibt noch einen Beitrag zu diesem Thema, das solltest du auch beobachten:
http://forum.contenido.org/viewtopic.php?f=60&t=30092

Was hast du als Encoding für Kyrillisch eingestellt? Falls das z. B. UTF-8 ist, sollte auch die Verbindung zur DB mit UTF-8 geschehen.

Das kriegst du eventuell mit phpMyadmin (unter Servervariablen) raus oder du machst folgende Abfrage:

Code: Alles auswählen

SHOW VARIABLES LIKE '%collation%'
Du kannst die Kollation der Verbindung in der Modulausgabe von "Search_Output" auch setzen. Suche dafür die Zeile (sollte ab ca. 122 vorkommen)

Code: Alles auswählen

    $search = new Search($options);
und ersetze dies gegen

Code: Alles auswählen

    $searchDb = new DB_Contenido();
    $searchDb->query('SET NAMES UTF8');
    $searchDb->query('SET CHARACTER SET utf8 COLLATE utf8_general_ci');
    $search = new Search($options, $searchDb);
Damit sollte es eventuell möglich sein, da die Suche ein DB-Objekt bekommt, über den die Kollation der Verbindung gesetzt wurde.

Falls du nicht UTF-8 hast,kriegst du die unterstützten Zeichensätze der DB mit der Query

Code: Alles auswählen

SHOW CHARSET
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Mi 3. Mär 2010, 13:01

Bei mir ist die Kodierung utf-8. Ich habe jetzt in Search_Output auch das code ersetzt, aber das Ergebnis ist immer noch dasselbe. Das andere Thema beschreibt mein Problem ziemlich genau, aber es bleibt ungelöst. Danke.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Mi 3. Mär 2010, 13:23

Hmm, als letzte Möglichkeit wäre der Suchindex zu analysieren. Der befüllt die Tabelle con_keywords (falls con das Tabellenpräfix bei dir ist). Vielleicht landen schon in der Tabelle korrupte Keywords, was dann dazu führt, dass die Suche nichts findet.

Wie sieht der Inhalt der Tabelle con_keywords bei dir aus? Falls die Inhalte Keywords darin mit falschem Zeichensatz gespeichert wurden, müsstest du die Queries "SET NAMES UTF8" und "SET CHARACTER SET utf8 COLLATE utf8_general_ci" in den Konstruktor der Klasse DB_Contenido, besser in den Konstruktor von DB_SQL (conlib/db_mysql.inc oder conlib/db_mysqli.inc) einfügen, die Tabelle con_keywords leeren und den Suchindex für alle Artikel ausführen, damit Inhalte mit richtigem Encoding darin landen.

Das ist aber nur eine Vermutung, einen Versuch wäre es vielleicht wert...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Do 4. Mär 2010, 15:44

xmurrix hat geschrieben: Wie sieht der Inhalt der Tabelle con_keywords bei dir aus? Falls die Inhalte Keywords darin mit falschem Zeichensatz gespeichert wurden, müsstest du die Queries "SET NAMES UTF8" und "SET CHARACTER SET utf8 COLLATE utf8_general_ci" in den Konstruktor der Klasse DB_Contenido, besser in den Konstruktor von DB_SQL (conlib/db_mysql.inc oder conlib/db_mysqli.inc) einfügen, die Tabelle con_keywords leeren und den Suchindex für alle Artikel ausführen, damit Inhalte mit richtigem Encoding darin landen.
Danke. Ich weiss nich genau wo finde ich diese Sachen um zu überprüfen?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von xmurrix » Do 4. Mär 2010, 22:32

Hast du Zugriff auf die DB, z. B. über phpMyAdmin?
Damit kannst du zumindest feststellen, über welche Kollation (Zeichenkodierung) die Verbindung zwischen der Datenbank und PHP läuft.

Habe da noch einen anderen Tipp, vieleicht hilft das. Leider ist das kein konktreter Lösungsvorschlag, sondern eher nach dem "trial and error" Prinzip...

Öffne mal die Datei "contenido/classes/class.search.php" und ändere die Zeile 497 von

Code: Alles auswählen

        $key = str_replace($special_chars, "", $key);
in

Code: Alles auswählen

        foreach ($special_chars as $p => $v) {
            $key = strtr($key, $v, "");
        }
Es kann sein, das die entsprechende Zeile ein paar Zeilen unter-/überhalb von 497 liegt. Habe da eine Vermutung, dass die Verwendung von str_replace das Problem verursacht.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

pauls
Beiträge: 35
Registriert: So 15. Nov 2009, 20:10
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von pauls » Fr 5. Mär 2010, 22:20

Danke für so viel Hilfe. Ich habe bei mir kein myphpadmin installiert. Der andere Vorschlag hat leider nicht geholfen.

various
Beiträge: 24
Registriert: Mo 2. Feb 2009, 18:40
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von various » Di 15. Jun 2010, 16:39

ich hab die gesamten "lösungen" in den entsprechenden artikeln durchgeführt, jedoch ohne erfolg.

sucheingabe wird auch richtig abgesendet und ausgegeben.

die kodierungen sind meines erachtens nach richtig gesetzt.

beim speichern vom kyrillischen inhalten wird in der db tabelle con_keywords falsch abgelegt!?

es sind lediglich zahlenwerte vorhanden ....

das ist doch net richtig oder?

hab es jetzt sowiet umgebogen das so gespeichert wird

&#1056;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;

oder müssen die werte direkt in kyrillischen zeichen in der db vorliegen damit etwas gefunden wird?!

trotzdem wird bei mir nichts gefunden.

viele grüße

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Suche auf Kyrillisch geht nicht

Beitrag von Oldperl » Di 15. Jun 2010, 17:03

Servus,

da gibt's bereits einen Bugbeitrag wegen dem Zeichensatz :arrow: http://forum.contenido.org/viewtopic.ph ... 09#p144909
Vielleicht hat es ja damit zu tun.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Gesperrt