Author Topic: nochmal Suche und Umlaute  (Read 8256 times)

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
nochmal Suche und Umlaute
« on: February 28, 2007, 11:07:34 PM »
Hallo,

zur Erinnerung: die verschiedenen Editoren produzieren unterschiedliche "Kodierungen" der Umlaute (Xinha kodiert z.B. garnicht, der FCKeditor erzeugt dagegen HTML-Entities), wodurch die Benutzung der Suchfunktion z.Z. nur mit Xinha richtig und einheitlich funktioniert.

Nachdem wir aber wohl - wenn ich das richtig sehe - übereinkamen, daß die Änderung aller Module zu umständlich sei, habe ich stattdessen die Suchfunktion etwas weiter aufgebohrt.
Damit funktioniert die Suche nun in allen Modulen, unabhängig vom benutzten Editor.

Anbei zum testen ein Zip-Archiv mit einer veränderten search.php und einer neuen Datei search_convert.php, die beide ins Verzeichnis search/ gehören.
Die search_convert.php wird benötigt um ein paar spezielle Sonderzeichen anzupassen.

Die Änderungen an der search.php:
- der Such-String "$string" wird kopiert nach "$string_entities", und enthaltene Sonderzeichen/Umlaute zu HTML-Entities gewandelt. $string_entities wird im folgenden genauso behandelt/gesplittet wie $string.
- Beim Aufbau des Query-Terms wird nun sinngemäß statt ' ... AND feld LIKE %Tür% ...' einfach ' ... AND ( feld LIKE %Tür% OR feld LIKE %Tür% ) ... ' benutzt.

Dieses Vorgehen hat den klaren Vorteil, daß die Suche damit sowohl mit alten Seiten, als auch mit neuen funktioniert, unabhängig vom benutzten Editor. Und daß kein Modul angepaßt werden muß.

Bitte ausgiebig prüfen. - Ich selbst konnte bis jetzt nur unter Linux testen.

MfG, Thomas.

Edit: Anhang entfernt. Bitte im Thread "WebsiteBaker und Chinesisch" nachsehen.
« Last Edit: April 13, 2007, 10:33:45 PM by thorn »

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #1 on: March 01, 2007, 05:35:09 AM »
Hallo,

hab deinen code mal getestet und das sieht ja immer besser aus. Wenn ich dich richtig verstehe erschlagen wir damit alle möglichen Varianten, egal welcher Editor und egal wie die Editoren das speichern und ein Anpassen der Module ist auch nicht erforderlich. Richtig?

Folgendes ist mir noch aufgefallen. Habe die Suche auf einer meiner Seiten mal eingesetzt (http://www.michaelismesse.de). Seite ist in ISO-8859-1 und FCKEDitor wird eingesetzt.

Bei Suche nach " \ " , " " " und " ' " werden "\" dem Ergebnis hinzugefügt

Bei der Suche nach " , " wird gar nix angezeigt.

Kann man das noch richten?

Matthias

P.S.
unabhängig dass man mit diesem code die suche zum laufen bekommt ist damit der Mischmasch in den Datenbanken ja noch nicht behoben. Ich denke hier sollte in künftigen Versionen eine einheitliche Linie rein, was bedeutet, der User sollte die Möglichkeit haben entweder WB komplett in UTF8 zu betreiben oder mit HTML-Entities. Aber das ist ein Thema das an anderes Stelle diskutiert werden sollte  :wink:
« Last Edit: March 01, 2007, 05:36:58 AM by ruebenwurzel »

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #2 on: March 01, 2007, 08:46:40 PM »
Hallo,

hab deinen code mal getestet und das sieht ja immer besser aus. Wenn ich dich richtig verstehe erschlagen wir damit alle möglichen Varianten, egal welcher Editor und egal wie die Editoren das speichern und ein Anpassen der Module ist auch nicht erforderlich. Richtig?

Folgendes ist mir noch aufgefallen. Habe die Suche auf einer meiner Seiten mal eingesetzt (http://www.michaelismesse.de). Seite ist in ISO-8859-1 und FCKEDitor wird eingesetzt.

Bei Suche nach " \ " , " " " und " ' " werden "\" dem Ergebnis hinzugefügt

Bei der Suche nach " , " wird gar nix angezeigt.

Kann man das noch richten?

Zur ersten Frage: ja, daß ist richtig; das spielt nun alles keine Rolle mehr.

Zum ,: hmm, das wird schon im Original-Code der search.php entfernt (if $match!='exact' { $string=str_replace(',', '',... ) -- möglicherweise in der Annahme, ein User könnte die Suchbegriffe mit Komma trennen? Wenn man das ändert, funktioniert die Suche auch mit Kommata. Man muß halt einmal festlegen, wie man das handhaben will.

Zu den zugefügten "\": Keine Chance! siehe addslashes(): "Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte). ...  The PHP directive  magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data." -- passiert also automatisch; da kann ich in der search.php nichts mehr retten.

Darüber hinaus gibt es weitere Zeichen, die Probleme machen, und das ist dann doch wieder Editor-Abhängig:
- Das Zeichen "&" wird in Texten die mit Xinha erstellt wurden nicht gefunden (kann nicht behoben werden).
- Es gibt einige wenige (nicht relevante) Zeichen, die in Texten von Tiny_MCE nicht gefunden werden, z.B. "〈"=⟨, "⌈"=⌈, "ϖ"=ϖ und ein paar weitere.
- Es gibt eine ganze Reihe von Zeichen, die in Texten von HTML_Area nicht gefunden werden, aber auch die sind alle irrelevant (Sonderzeichen die in normalen Texten nicht vorkommen, oder nach denen man nicht sucht). Eine Ausnahme bilden hier die Zeichen "Š","š", die in manchen ost-europäischen Ländern gebraucht werden. Da kann man nur empfehlen, HTML-Area nicht zu benutzen.

Die beiden letzten Punkte rühren daher, daß die Editoren bestimmte Zeichen unterschiedlich kodieren (man kann z.b. "∩" als "∩", als "∩" oder als "∩" schreiben), und ich mich bei der Konvertierung in der search_convert.php für jeweils eine Variante entscheiden mußte. Und dabei habe ich immer die Variante von Xinha und FCKediror bevorzugt.
Das ist anders leider nicht möglich. [Den HTML_Area bitte ganz schnell wegwerfen!]

Man kann also sagen: Wir haben für normale Texte eine funktionierende Lösung die mit den drei brauchbaren Editoren funktioniert, und zwar für alle im europäischen Sprachraum vorkommenden Sonderzeichen. -- "Exotische" Sprachen funktionieren auch, siehe diesen kleinen Test http://nettest.thekk.de; dort die Seiten "Neuer Test - ...".

MfG, Thomas

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #3 on: March 02, 2007, 07:21:37 AM »
Hallo,

danke für die ausführliche Antwort. Vom Prinzip her hab ich mir das genauso gedacht wie du es geschrieben hast, ich wollte mich nur nochmal rückversichern. Ich denke ich werde diese neue Suchfunktion dem Developper team vorstellen und bin mr fast sicher, dass wir sie in der nächsten Version wiederfinden werden.

Super Arbeit, Danke

Matthias

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #4 on: March 02, 2007, 10:28:55 AM »
@thorn

Ich finde deine Lösung klasse. Genauso wie die erweiterte Suche (keyword highlighting) von FunkyMF, welche ich sehr gerne verwende:
http://forum.WebsiteBaker.org/index.php/topic,5396.0.html

Jetzt wollte ich diese highligting-Erweiterung gern in Kombination mit deiner Lösung einsetzen; sollte eigentlich nicht schwierig sein, die beiden Code-Zeilen
Code: [Select]
//Add search string for highlighting                   
$sstring = implode("+", $string);
$link = $link."?searchresult=1&sstring=".$sstring;
in deine modifizierte search.php einzufügen. Aber jetzt finde ich natürlich nicht die von Funky_MF beschriebenen Zeilen, hinter welche der Code ergänzt werden muss (ist ja auf die ursprüngliche search.php bezogen). Kannsrt du vielleicht mal schauen, an welcher Stelle die Einfügungen vorgenommen werden müssten?

Dann wäre alles perfekt!

Gruß, micon

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #5 on: March 02, 2007, 03:52:01 PM »
Hallo,

Ich finde deine Lösung klasse. Genauso wie die erweiterte Suche (keyword highlighting) von FunkyMF, welche ich sehr gerne verwende:
http://forum.WebsiteBaker.org/index.php/topic,5396.0.html

Jetzt wollte ich diese highligting-Erweiterung gern in Kombination mit deiner Lösung einsetzen; sollte eigentlich nicht schwierig sein, die beiden Code-Zeilen
Code: [Select]
//Add search string for highlighting                   
$sstring = implode("+", $string);
$link = $link."?searchresult=1&sstring=".$sstring;
in deine modifizierte search.php einzufügen.

hab ich bei der angehängten Version mal gemacht.
Diese highligting-Erweiterung funktioniert aber wohl nur bei Verwendung von Xinha oder HTMLArea? - Mit Entities funktioniert es nicht...
An der Stelle müßte ich mich mal mit FunkyMF kurzschließen...

MfG, Thomas
« Last Edit: April 13, 2007, 10:34:36 PM by thorn »

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #6 on: March 02, 2007, 03:59:10 PM »
Hallo,

wenn ihr (Thomas [thorn] und Manfred [funky_mf] ) eine Kombination hinbekommt, die beides hinbekommt und ohne Änderungen der Templates (highlightning in die core files in die page_content funktion integrieren) geb ich einen aus  :-D. Das wär dann wie Ostern und Weihnachten zusammenfällt.

Matthias

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #7 on: March 02, 2007, 04:10:36 PM »
@thorn:
Quote
Diese highligting-Erweiterung funktioniert aber wohl nur bei Verwendung von Xinha oder HTMLArea?
Nein, sollte auch mit HtmlEntities funzen. Meine Testseite verwendet den FCK-Editor und UTF-8, sieh mal hier:
http://ebm-masa.de/pages/de/kennenlernen.php
Ist die search.php von Funky_MF

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #8 on: March 02, 2007, 04:59:21 PM »
@thorn:
Quote
Diese highligting-Erweiterung funktioniert aber wohl nur bei Verwendung von Xinha oder HTMLArea?
Nein, sollte auch mit HtmlEntities funzen. Meine Testseite verwendet den FCK-Editor und UTF-8, sieh mal hier:
http://ebm-masa.de/pages/de/kennenlernen.php
Ist die search.php von Funky_MF

Seh ich nicht! Der Charset ist dort überall ISO-8859-1. Manche Seiten sind mit Entities und manche ohne. Die Suche funktioniert nur bei den Entity-losen Seiten (bei Umlauten), und highlighting kann ich dort nirgends erkennen... Ist das die richtige Adresse?
Edit: tschuldigung, da war ich etwas zu schnell. Die Suche geht auch über Entities. Aber highlighting kann ich trotzdem nicht sehen...

Ich habe auf die schnelle mal was probiert:
Im Zip sind zwei Dateien, eine angepaßte frontend.functions. php mit den Änderungen die FunkyMF  entwickelt hat und eine neue search.php mit der ich die Änderungen anspreche.
Bitte mal ausprobieren. Bei mir läuft es in ersten Tests.
Edit: Achja, Änderung an Templates ist nicht notwendig. Es sollte im CSS aber eine Klasse "highlight" vorhanden sein.


MfG, Thomas

« Last Edit: April 13, 2007, 10:34:58 PM by thorn »

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #9 on: March 02, 2007, 05:30:32 PM »
Hallo,

habe deine letzte .zip entpackt, es scheint zu funktionieren.

Gib mal den Suchbegriff "europäisch" ein. Du bekommst ne lange Liste von Treffern, weil das fast bei jeder Seite im Titel steht. Die meisten Seiten sind allerdings noch ohne Inhalt.

Das highligting kannst du auf der zweiten Trefferseite ("Wissenswertes...) sehen, dort hab ich am Ende des textes mal das Wort eingegeben (highlightet=hellblau hinterlegt).
Das "europäisch" in den gesamten Seitentiteln nicht hinterlegt ist, hat mich auch erst verwundert, aber ich bin dahintergekommen. Funky_MF wendet die Funktion in seinem mod nur im Bereich page_content() an. Die Seitenüberschriften sind aber im Template durch die Variable page_title erzeugt und werden bei Funky_MF nicht mit eibezogen.


Noch ein anderes Beispiel, wo das highlighting erkennbar ist, wäre das Suchwort "überzeugt".

Probiers mal.


Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #10 on: March 02, 2007, 06:10:29 PM »
Das "europäisch" in den gesamten Seitentiteln nicht hinterlegt ist, hat mich auch erst verwundert, aber ich bin dahintergekommen. Funky_MF wendet die Funktion in seinem mod nur im Bereich page_content() an. Die Seitenüberschriften sind aber im Template durch die Variable page_title erzeugt und werden bei Funky_MF nicht mit eibezogen.

 :-D OK, das sehe ich ein -- wo nichts ist, kann auch nichts "gehighlightet" werden ...

Das sollte man nun auch noch ändern. Aber statt jetzt den ganzen Block noch mal in die Funktion page_title zu kopieren (und dann möglicherweise nochmal für den Footer, Menus, ...), sollte man eine andere Lösung finden. Eine Funktion highlight()? Man könnte zumindest den foreach-Block auslagern, sodaß nur noch ... $foo=highlight($arr_string); echo $foo; stehen bleibt.


Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #11 on: March 02, 2007, 07:01:25 PM »
So, hier nochmal die frontend.functions. php.
Ich habe eine Funktion search_highlight() hinzugefügt (basierend auf dem Code von FunkyFM), und page_content und page_title angepaßt.
Aus page_title wird allerdings auch der Header <titel> erzeugt, sodaß in dem Moment, wenn die Suchanfrage auf den Titel paßt, ein Header <title>Testinstanz - <span class="highlight">Text..mit..Treffer</span>weitere Text</title> erzeugt wird. -- Das scheint aber keine negativen Auswirkungen zu haben, und besteht, wie gesagt, nur in diesem einen Moment.


MfG Thomas
« Last Edit: April 13, 2007, 10:35:18 PM by thorn »

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #12 on: March 02, 2007, 07:10:07 PM »
Hallo Thomas,

du bist spitze! Das funktioniert jetzt wie gewollt.
Das werden Dir noch viele danken!

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #13 on: March 02, 2007, 07:39:20 PM »
Ha, danke für die Blumen, aber ich habe ja im Grunde nur die Funktion von FunkyMF übernommen.

MfG, Thomas

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #14 on: March 02, 2007, 08:12:59 PM »
Hallo Thomas,

das sieht ja mal absolut geil aus. Bevor ich dann aber einen ausgebe  :-D :-D :-D (das mein ich wirklich ernst) muss ich noch ein bisserl nörgeln.(nicht böse gemeint  :wink:)

Die highlightning funktion für den page_title zeigte bei mir auch eine treffer bei einem alt tag für ein header image. Weil er das dann gehighlighted hat hats mir das design verschoben, deswegen hab ich den page_title part wieder rausgenommen.

Auch im normalen content werden die Treffer doppelt eingebunden
Code: [Select]
<span class="highlight"><span class="highlight">Miltenberg</span></span>
(kannst es testen auf www.michaelismesse. de)

Aber ansonsten Respekt Respekt

Matthias

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #15 on: March 03, 2007, 01:19:03 PM »

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #16 on: March 03, 2007, 04:16:34 PM »
Hallo,

schau mal hier:

http://projects.WebsiteBaker.org/websitebaker2/changeset/437

 :-D :-D :-D

Matthias

geil! :-D

Aber leider etwas zu früh...

ich habe mir den RegEx-Teil der alten Funktion nochmal genauer angesehen, und muß leider sagen, daß das nicht richtig funktioniert!
Versuch das mal bei z.B.
Code: [Select]
<p>Text such Text text such text text  noch mehr text esuch suche text suchen suche.</p>mit Suchstring "such".
Er "highlightet" nicht alle Treffer.

Ich habe einige Zeit gebraucht um zu folgender Lösung zu kommen,
bitte Funktion austauschen:

EDIT I:
Code zurückgezogen -- da sind noch erhebliche Probleme aufgetreten.
Ich arbeite weiter dran, näheres folgt.



Und noch etwas müssen wir vorher klären:
Zur Zeit klappt das highlighting nicht wenn:
- ein Editor benutzt wird, der keine HTML_Entities erzeugt
und
-  sich die Groß/Kleinschreibung von Umlauten im Suchstring und auf der Seite unterscheiden.
(Sprich: man sucht nach "TÜR", auf der Seite steht aber Tür.) Das gilt auch für andere Zeichen, wie áóèýæ... (Bei Verwendung von HTML-Entities klappt das irgenwie 'automagically')

Das kann man natürlich sehr leicht lösen, indem man setlocale(LC_ALL, 'de_DE'); setzt, was erstaunlicherweise dann auch für áéæý... funktioniert.

ABER:

unter Linux funktioniert das obige Beispiel mit setlocale, unter Windows (wenn der Server unter Windows läuft) gibt es da wohl Probleme:
Zitat von http://de.php.net/manual/en/function.setlocale.php : "Warning
The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale()."
Außerdem muß man unter Windows andere Bezeichnungen fürs Lands benutzen, siehe  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp und http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_country_strings.asp
Hier fehlt mir einfach das Background-Wissen um zu entscheiden wie kritisch das ist. Ggf. müßte man das sogar konfigurierbar machen?
« Last Edit: March 04, 2007, 12:29:57 AM by thorn »

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #17 on: March 03, 2007, 06:00:44 PM »
@ thorn

Kann es sein, dass bei der letzten Lösung wiederum der page_title beim highlighting nicht berücksichtigt wird?

Gruß, micon

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #18 on: March 03, 2007, 07:40:04 PM »
@ thorn

Kann es sein, dass bei der letzten Lösung wiederum der page_title beim highlighting nicht berücksichtigt wird?

Gruß, micon

Hallo,

welche "Version" benutzt Du den nun?
Wenn Du die Version aus dem Zip benutzt sollte es noch gehen. Wenn Du Matthias letzte Änderung mitgemacht hast, dann nicht mehr, weil er es herausgenommen hat. Siehe etwas weiter oben - Probleme mit einem ALT-Tag.


Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #19 on: March 03, 2007, 09:08:00 PM »
Stimmt, wenn ich deine letzte .zip nehme, funktioniert es noch.
Wenn ich dann aber in dieser deinen letzten geposteten Code austausche (wegen des von dir beschrieben bugs), gehts nicht mehr. Hat also offensichtlich doch nichts mit Matthias´ Änderung zu tun, oder?

Für das von mir verwendete Template Nautica02Liquid ist es aber erforderlich, dass der page title vom highligting mit erfasst wird. Soll ich dazu nun doch deine vorletzte (ungefixte) Version aus dem .zip nehmen?
« Last Edit: March 03, 2007, 09:09:39 PM by micon »

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #20 on: March 03, 2007, 09:53:34 PM »
Für das von mir verwendete Template Nautica02Liquid ist es aber erforderlich, dass der page title vom highligting mit erfasst wird. Soll ich dazu nun doch deine vorletzte (ungefixte) Version aus dem .zip nehmen?

Problem erkannt...
Das zu ändern bedeutet aber, daß andere Templates nicht mehr richtig funktionieren.
Und die alte Version zu nehmen ist auch keine gute Idee, da die nicht richtig tat was sie tun sollte.

Naja, im Anhang mal eine Version für Dich die auch page_title berücksichtigt.
« Last Edit: April 13, 2007, 10:36:25 PM by thorn »

Offline micon

  • Posts: 95
Re: nochmal Suche und Umlaute
« Reply #21 on: March 03, 2007, 10:25:22 PM »
@ thorn

A) tausend Dank, dass du so auf Sonderwünsche reagierst!

B) diese bringat aber einen ERROR beim Seitenaufruf:
Code: [Select]
Parse error: syntax error, unexpected $end, expecting ')' in /www/htdocs/w0080c2a/framework/frontend.functions.php on line 334

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #22 on: March 03, 2007, 10:58:13 PM »
@ thorn

A) tausend Dank, dass du so auf Sonderwünsche reagierst!

B) diese bringat aber einen ERROR beim Seitenaufruf:
Code: [Select]
Parse error: syntax error, unexpected $end, expecting ')' in /www/htdocs/w0080c2a/framework/frontend.functions.php on line 334

 :? Den Fehler verstehe ich nicht, daß gehört zu einem Bereich in dem ich nie war...
Kannst Du mir mal dein Template zukommen lassen? Oder, wenn Du das standard-Template verwendest - wie kann man da die Suche integrieren?

BTW: gerade merke ich, daß die letzte Änderung am RegEx daneben ging. Bitte wie folgt ändern:
Code: [Select]
// dies geht auch,und braucht keinen workaround, !ist aber deutlich langsamer!
$foo=preg_replace('/([^<>&]*)('.$string.')([^;<>]*(?='.$string.'))/iUS', '$1<span class="highlight">$2</span>$3',$foo);
$foo=preg_replace('/(>[^<&]*)('.$string.')(?!<\/span>)/iS', '$1<span class="highlight">$2</span>',$foo);

zu
// dies geht auch,und braucht keinen workaround, !ist aber deutlich langsamer!
$foo=preg_replace('/([^<>]*)('.$string.')([^<>]*(?='.$string.'))/iUS', '$1<span class="highlight">$2</span>$3',$foo);
$foo=preg_replace('/(>[^<]*)('.$string.')(?!<\/span>)/iS', '$1<span class="highlight">$2</span>',$foo);

also zweimal & und einmal ; entfernen.
Schitt, da muß ich nochmal ran...

Offline thorn

  • Posts: 980
  • Gender: Male
    • Projects
Re: nochmal Suche und Umlaute
« Reply #23 on: March 04, 2007, 02:09:53 AM »
So.. nun denn aber!

Code: [Select]
function search_highlight($foo='', $arr_string=array()) {
  //??? setlocale() müßte in die framework/class.wb.php ? Konfigurierbar?
  //??? setlocale(LC_ALL, 'de_DE');
  // we get (0=>'door',1=>'door',2=>'Tür',3=>'T&uuml;r'), so skip identicaly strings
  $last_string="";
  foreach($arr_string as $string) {
    // filter meta-characters
    $string=preg_quote($string, '/');
    if ($string!=$last_string ) {
      // /.../iUS : i=PCRE_CASELESS, U=PCRE_UNGREEDY, S=(do extra analysis)
      // ?= : lookahead
      // hint: don't match $string in case of <..$string..> (HTML-Syntax) or &..$string..; (HTML-Entity)
      $foo=preg_replace('/('.$string.')(?=[^>;]*(&|<))/iUS', '<span class="highlight">$1</span>',$foo);
      $last_string=$string;
    }
  }
  return $foo;
}
Dies sollte nun die endgültige Fassung sein. Wie oben beschrieben, bitte austauschen!
(Natürlich vorher ausgiebig testen).

Hauptgrund für die Überarbeitung:
- die alte Version tat garnicht richtig...
- Suche nach z.b. "uml" matched auch alle entsp. HTML-Entities (sieht lustig aus)
- Suche nach "a" oder "o" wirkt sich katastrophal aus
- ... und noch ein paar Fehler, die mir nicht mehr einfallen

Die Frage wegen setlocale() (siehe auch weiter oben) ist noch aktuell.


Speziell für micon habe ich noch ein zip angehängt, darin die frontend.functions. php mit page_title-highlighting. Probiere die mal aus.


Gut'Nacht, Thomas
« Last Edit: April 13, 2007, 10:36:50 PM by thorn »

Offline ruebenwurzel

  • Betatester
  • **
  • Posts: 8383
  • Gender: Male
  • Keep on Rockin
    • Familie Gallas Online
Re: nochmal Suche und Umlaute
« Reply #24 on: March 04, 2007, 09:16:35 AM »
Hallo Thomas,

http://projects.WebsiteBaker.org/websitebaker2/changeset/438

in blindem Vertrauen, dass das ok ist. Funktioniert zumindest einwandfrei auf meinen Testseiten.

Quote
Die Frage wegen setlocale() (siehe auch weiter oben) ist noch aktuell.

Hilf mir mal wieder auf die Sprünge für was du das in der class.wb.php brauchst.

Matthias