Suche auf Kyrillisch geht nicht
Suche auf Kyrillisch geht nicht
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?
Re: Suche auf Kyrillisch geht nicht
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
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.
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.
Re: Suche auf Kyrillisch geht nicht
Danke für die Antwort. Wo befinden sich diese Spracheinstellungen?
Re: Suche auf Kyrillisch geht nicht
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
in
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
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']))));
}
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]));
}
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.
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.
Re: Suche auf Kyrillisch geht nicht
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.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.
Mit "echo $searchterm" verstehe ich nicht was mann machen soll. Wie macht man das genau? Danke im Voraus.
Re: Suche auf Kyrillisch geht nicht
Die Variable kannst du folgendermaßen ausgeben:
Versuche auch festzustellen, ob die Eingabe überhaupt korrekt ankommt. In der Modulausgabe von "Search_Output" folgende Zeilen einfügen:
Gruß
xmurrix
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>";
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>";
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.
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.
Re: Suche auf Kyrillisch geht nicht
Danke. Beide Sachen funktionieren gut. Ich sehe zwei mal das richtige Suchwort in normaler Kodierung. Was kann man noch probieren?
Re: Suche auf Kyrillisch geht nicht
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:
Du kannst die Kollation der Verbindung in der Modulausgabe von "Search_Output" auch setzen. Suche dafür die Zeile (sollte ab ca. 122 vorkommen)
und ersetze dies gegen
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
Gruß
xmurrix
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%'
Code: Alles auswählen
$search = new Search($options);
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);
Falls du nicht UTF-8 hast,kriegst du die unterstützten Zeichensätze der DB mit der Query
Code: Alles auswählen
SHOW CHARSET
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.
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.
Re: Suche auf Kyrillisch geht nicht
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.
Re: Suche auf Kyrillisch geht nicht
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
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.
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.
Re: Suche auf Kyrillisch geht nicht
Danke. Ich weiss nich genau wo finde ich diese Sachen um zu überprüfen?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.
Re: Suche auf Kyrillisch geht nicht
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
in
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
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);
Code: Alles auswählen
foreach ($special_chars as $p => $v) {
$key = strtr($key, $v, "");
}
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.
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.
Re: Suche auf Kyrillisch geht nicht
Danke für so viel Hilfe. Ich habe bei mir kein myphpadmin installiert. Der andere Vorschlag hat leider nicht geholfen.
Re: Suche auf Kyrillisch geht nicht
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
Регуляр
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
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
Регуляр
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
-
- Beiträge: 4250
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Kontaktdaten:
Re: Suche auf Kyrillisch geht nicht
Servus,
da gibt's bereits einen Bugbeitrag wegen dem Zeichensatz http://forum.contenido.org/viewtopic.ph ... 09#p144909
Vielleicht hat es ja damit zu tun.
Gruß aus Franken
Ortwin
da gibt's bereits einen Bugbeitrag wegen dem Zeichensatz 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
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog