Page 1 of 1

Suche ignoriert codierte Umlaute

Posted: Mon 8. Aug 2005, 21:59
by ebser
Hallo,
ich baue zur Zeit mit der Version 1.2.3 eine Schulseite in phpwcms um. Das Angebot ist noch im Aufbau, momentan sind im wesentlichen nur Seiten mit ehemaligen Schülernamen und Emailadressen vorhanden. Mit dem phpwcms-eigenen Suche-Content hab ich Probleme.
Vorweg den Cache habe ich schon in der conf.inc.php deaktiviert:

Code: Select all

$phpwcms["cache_timeout"]     = 0;
Zunächst werden die Treffer nicht korrekt verlinkt.
Zum Ausprobieren:
http://www.gfs-ebs.de/index.php?suche
mit Suchbegriff: Jahrgang -> 27 Treffer
Diese verhalten sich aber zum Teil wie Emaillinks. Dieser Bug scheint bekannt zu sein?
Bei der Suche nach Müller wird überraschenderweise gar nichts gefunden, obwohl der Name z. B. bei wir am GFS -> Ehemalige -> Abi 1985 mehrfach vorkommt.
Da die Suche nach Meier erfolgreicher verläuft, wird es an dem Umlaut ü liegen.
Dabei ist noch folgendes anzumerken:
Die Namen der Ehemaligen wurden als HTML-Content eingebaut. Sie wurden aus dem Quelltext der "alten" Seiten übernommen. Daher steht im HTML-Contentteil bei Müller das HTML-konforme Müller! Diese Übernahme habe ich vor allem deswegen gewählt, da die Email-Adressen dort schon "spamsicher" im Unicode codiert waren und ich das gerne beibehalten wollte. Sonst hätten über hundert Adressen mit dem {NOSPAM_EMAIL} Tag neu kodiert werden müssen.
Also es wäre schön, wenn die Suchfunktion diese Hürde nehmen könnte!

Posted: Tue 23. Aug 2005, 19:44
by Oliver Georgi
die neue Suche ja ;-)

die ist aber nicht fertig.

Oliver

Posted: Thu 23. Mar 2006, 22:31
by sigi jeske
hallo, bis wann kann man damit rechnen ? das ist nämlich wirklich störend, weil damit die glaubwürdigkeit der suche verloren geht...
ansonsten ist dieses phpwcms einfach genial - super ! :D

Posted: Fri 24. Mar 2006, 17:32
by marcus@localhorst
ich denke mal, da hilft nur, die suche zu ändern/erweitern.
das mit den links im suchergebniss liegt einfach mal daran, das der content nach x zeichen abgeschnitten wird und wenn da ein maillink oder so geöffnet wurde, dann verhaspelt sich die darstellung.
du müsstest also alle tags aus dem suchergebniss rausfiltern und dann erst das ergebniss ausgeben. (mit etwas php verständniss, geht das relativ fix...)

das selbe mit den umlauten, da müsstest du eine convertfunktion nehmen/schreiben und das suchwort nach HTML konvertieren (wenn wirklich alle sonderzeichen HTML codiert wurden)
oder nach beidem suchen.

das ist erstmal so ein ansatz, wie ich das lösen würde.
hab aber keine snippets parat :-(

oder doch?

suche in der datei include/inc_front/content/cnt13.article.inc.php
ab zeile 80 nach diesem code und ergänze das fett gedruckte

if($s_count) {
$s_list[$s_run]["id"] = $s_id;
$s_list[$s_run]["cid"] = $s_cid;
$s_list[$s_run]["rank"] = $s_count;
$s_list[$s_run]["title"] = $s_title;
$s_list[$s_run]["date"] = $s_date;
$s_list[$s_run]["user"] = $s_user;
$s_text = clean_replacement_tags($s_text);
$s_text = strip_tags($s_text);
$s_text = preg_replace("/\[.*?\]/si","", $s_text);
$s_list[$s_run]["text"] = (strlen($s_text) > 200) ? trim(substr($s_text, 0, 200)).'…' : $s_text;
$s_run++;
}


in den ersten zeilen der obengenamnnen datei findest du folgende zeilen:
$content["search_word"] = ...
hier wird das suchwort vorbereitet, bevor es an die DB geht.
vielleicht kannst du da schon etwas machen?

vielleicht hilft dir der ansatz.
grüße
marcus

Posted: Fri 24. Mar 2006, 17:41
by Oliver Georgi
das ist schon gefixt.
http://www.phpwcms.org/support/cnt13.ar ... nc.php.zip

Packt die Datei dann unter include/inc_front/content.

Oliver

Posted: Fri 24. Mar 2006, 18:08
by sigi jeske
supa - vielen dank - funktioniert
gruss sigi :lol:

Posted: Mon 24. Jul 2006, 16:46
by Shapeshifter
Hi,

klappt wirklich super. Allerdings habe ich nun das Problem, dass ich das "Suchwort-Highlighting-Addon" von der eMediaFabrik nicht mehr nutzen kann. Gibt es inzwischen eine andere Möglich, das Suchwort highlighten zu lassen?

Grüße,
Fabian

Posted: Mon 24. Jul 2006, 17:42
by Oliver Georgi
1.2.7 - kommt zeitnah.

Oliver

Posted: Mon 24. Jul 2006, 19:56
by Shapeshifter
Ich hab die Pre 1.2.7 drauf, da ist es aber noch nicht möglich oder sehe ich es nicht? :)

Posted: Mon 24. Jul 2006, 20:38
by Oliver Georgi
nee, da noch nicht.

Oliver

Posted: Wed 26. Jul 2006, 19:12
by Kosse
Shapeshifter wrote:Hi,

klappt wirklich super. Allerdings habe ich nun das Problem, dass ich das "Suchwort-Highlighting-Addon" von der eMediaFabrik nicht mehr nutzen kann. Gibt es inzwischen eine andere Möglich, das Suchwort highlighten zu lassen?

Grüße,
Fabian
Hi Shapeshifter, add this to OG latest file cnt13 (http://www.phpwcms.org/support/cnt13.ar ... nc.php.zip)

line 22 add this:

Code: Select all

// 7 lines added for hightlight inspired from Johannes Meyknecht
// function by Aidan Lister (aidan@php.net)
function str_highlight ($text, $needle, $start = "<span style="background-color:#fff6d0;">", $end = "</span>"){
    $needle = (array) $needle;
    foreach ($needle as $needle_single) {
		$text = preg_replace('/(' . preg_quote($needle_single) . ')/i', $start . '\1' . $end, $text);
    }
return $text;
}
around line 85/90 look for this:

Code: Select all

			$s_text = preg_replace('/\s/i', ' ', $s_text);
			$s_text = preg_replace('/\s{2,}/i', ' ', $s_text);
			$s_text = trim($s_text);
between $s_text = preg_replace('/\s{2,}/i', ' ', $s_text); and $s_text = trim($s_text); put this line:

Code: Select all

				$s_text = str_highlight($s_text,$content["search_word"]);
That should highlight your keywords (providing they appear in the first 200 words displayed as a result ;)

PS: if u want to change the "highlight" style just adapt this style

Code: Select all

<span style="background-color:#fff6d0;">
Cheers

Posted: Wed 26. Jul 2006, 23:42
by pico
Hi

dosn't work for me - it shows <span.......>Searchword</span> for me

have done some little changes:

after

Code: Select all

// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) {
   die("You Cannot Access This Script Directly, Have a Nice Day.");
}
add

Code: Select all

function str_highlight ($text, $needle, $start = "<span class=\"highlight\">", $end = "</span>"){
    $needle = (array) $needle;
    foreach ($needle as $needle_single) {
      $text = preg_replace('/(' . preg_quote($needle_single) . ')/i', $start . '\1' . $end, $text);
    }
return $text;
}
have changed to a Class, so it can be handeld from frontend.css
so add to frontend.css

Code: Select all

.highlight{
 background-color: #FFF36F;
 border: 1px dotted green;
 }
change

Code: Select all

		if( strlen($s_text) > 200 ) {
						$s_list[$s_run]["text"]  = wordwrap($s_text, 200, "\n");
						list($s_list[$s_run]["text"]) = explode("\n", $s_list[$s_run]["text"]);
						$s_list[$s_run]["text"]  = trim($s_list[$s_run]["text"]);
						$s_list[$s_run]["text"]  = html_specialchars($s_list[$s_run]["text"]);
						$s_list[$s_run]["text"] .= '…';
					} else {
						$s_list[$s_run]["text"]  = html_specialchars($s_list[$s_run]["text"]);
					}
					$s_run++;
				}
to

Code: Select all

		if( strlen($s_text) > 200 ) {
						$s_list[$s_run]["text"]  = wordwrap($s_text, 200, "\n");
						list($s_list[$s_run]["text"]) = explode("\n", $s_list[$s_run]["text"]);
						$s_list[$s_run]["text"]  = trim($s_list[$s_run]["text"]);
						$s_list[$s_run]["text"]  = htmlentities($s_list[$s_run]["text"]);
						$s_list[$s_run]["text"] .= '…';
					} else {
						$s_list[$s_run]["text"]  = htmlentities($s_list[$s_run]["text"]);
					}
					$s_list[$s_run]["text"] = str_highlight($s_list[$s_run]["text"],$content["search_word"]);
					$s_run++;
				}