Suche ignoriert codierte Umlaute

Use GitHub to post bug reports and error descriptions for phpwcms. Describe your problem detailed!
Locked
ebser
Posts: 9
Joined: Mon 3. Jan 2005, 20:12

Suche ignoriert codierte Umlaute

Post 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!
User avatar
Oliver Georgi
Site Admin
Posts: 9907
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

die neue Suche ja ;-)

die ist aber nicht fertig.

Oliver
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
sigi jeske
Posts: 2
Joined: Thu 23. Mar 2006, 21:29

Post 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
User avatar
marcus@localhorst
Posts: 815
Joined: Fri 28. May 2004, 11:31
Location: localhorst
Contact:

Post 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
User avatar
Oliver Georgi
Site Admin
Posts: 9907
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post 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
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
sigi jeske
Posts: 2
Joined: Thu 23. Mar 2006, 21:29

Post by sigi jeske »

supa - vielen dank - funktioniert
gruss sigi :lol:
Shapeshifter
Posts: 46
Joined: Tue 25. Oct 2005, 22:27

Post 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
User avatar
Oliver Georgi
Site Admin
Posts: 9907
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

1.2.7 - kommt zeitnah.

Oliver
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
Shapeshifter
Posts: 46
Joined: Tue 25. Oct 2005, 22:27

Post by Shapeshifter »

Ich hab die Pre 1.2.7 drauf, da ist es aber noch nicht möglich oder sehe ich es nicht? :)
User avatar
Oliver Georgi
Site Admin
Posts: 9907
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

nee, da noch nicht.

Oliver
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
User avatar
Kosse
Posts: 1066
Joined: Thu 9. Sep 2004, 12:08
Location: Brussels, Belgium
Contact:

Post 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
User avatar
pico
Posts: 2595
Joined: Wed 28. Jul 2004, 18:04
Location: Frankfurt/M Germany
Contact:

Post 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++;
				}
Lieber Gott gib mir Geduld - ABER BEEIL DICH
Horst - find me at Musiker-Board
Locked