Länge der Begriffe im Suchindex

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Gérome
Mitglied
Beiträge: 69
Registriert: 08.08.2003 11:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Gérome »

Manche Probleme lösen sich von selbst. Ich hatte bis eben nicht mehr an den Code gedacht. Bei uns läuft mein zuletzt geschriebener Codefetzen ganz anständig.


Grüße,
Gérome
Benutzeravatar
Scotty
Mitglied
Beiträge: 1451
Registriert: 15.06.2005 03:54
Wohnort: Neuruppin
Kontaktdaten:

Beitrag von Scotty »

Ja den hab ich auch ausprobiert ;), war auch ein guter Ansatz, aber so ist es besser:
Gefunden auf: phpbb.com ;)

So muss das sein, damit es Funktioniert:

Code: Alles auswählen

$entry = preg_replace('/(?<= )([\S]{1,2}|[\S]{21,})(?= )/',' ', $entry);
Scotty's .NET Projekte: StarTrek Infos X10, e-hahn Updater 3.10, Easy Desktop Note 1.06
Benutzeravatar
Gérome
Mitglied
Beiträge: 69
Registriert: 08.08.2003 11:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Gérome »

hm. Ich will mich ja gerne eines Besseren belehren lassen. Was kann denn dieser Code, was meiner nicht kann. Du schreibst ja " ...damit es funktioniert...". Was funktioniert denn mit meinem Code nicht? Ich würde dies nur gerne wissen, bevor ich daran rumfummele.


Grüße,
Gérome
Benutzeravatar
miccom
Mitglied
Beiträge: 5620
Registriert: 30.03.2003 23:53
Wohnort: Hamburg
Kontaktdaten:

Beitrag von miccom »

Scotty hat geschrieben:Ja den hab ich auch ausprobiert ;), war auch ein guter Ansatz, aber so ist es besser:
Gefunden auf: phpbb.com ;)

So muss das sein, damit es Funktioniert:

Code: Alles auswählen

$entry = preg_replace('/(?<= )([\S]{1,2}|[\S]{21,})(?= )/',' ', $entry);
das heisst doch, er indiziert alle zeichen von 2 bis 21 buchstaben länge?
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Getestet:

Code: Alles auswählen

<?php

$entry = 'es ja er es du da 01 02 03 04 05 06 07 08 09 1 2 3 4 5 6 7 8 9 
 normale wörter mit sönderzäißchün desoxyribonukleinsäure desoxyribonukleinsäure 
 desoxyribonukleinsäure desoxyribonukleinsäure 1 1 1 1 desoxyribonukleinsäure 
 desoxyribonukleinsäure desoxyribonukleinsäuredesoxyribonukleinsäure';
$entry = ' ' . strip_tags(strtolower($entry)) . ' ';
// Original
$entry1 = preg_replace('/[ ]([\S]{1,2}|[\S]{21,})[ ]/',' ', $entry);
echo('1.: ' . $entry1 . '<br />');
// Code von Gérome phpBB.de
$entry2 = preg_replace('/(\b)([\S]{1,2}|[\S]{21,})(\b)/',' ', $entry);
echo('2.: ' . $entry2 . '<br />');
// Code von Lese phpBB.com
$entry3 = preg_replace('/(?<= )([\S]{1,2}|[\S]{21,})(?= )/',' ', $entry);
echo('3.: ' . $entry3 . '<br />');

?>
Lese's Variante für gut befunden:
1.: ja es da 02 04 06 08 1 3 5 7 9 normale wörter mit sönderzäißchün desoxyribonukleinsäure desoxyribonukleinsäure 1 1 desoxyribonukleinsäuredesoxyribonukleinsäure
2.: normale rter mit nderz
3.: normale wörter mit sönderzäißchün

EDIT:

Ich habe dann nicht losgelassen und direkt weitergetestet:

Code: Alles auswählen

<?php

$entry = 'aber aber';
$entry = ' ' . strip_tags(strtolower($entry)) . ' ';

$stopword_list = @file("language/lang_german/search_stopwords.txt"); 

//
// Filter out strange characters like ^, $, &, change "it's" to "its"
//
$drop_char_match =   array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!');
$drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '',  '',   ' ', ' ', ' ', ' ', '',  ' ', ' ', '',  ' ',  ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ',  ' ', ' ');

for($i = 0; $i < count($drop_char_match); $i++)
{
	$entry =  str_replace($drop_char_match[$i], $drop_char_replace[$i], $entry);
}

if ( !empty($stopword_list) )
{
	for ($j = 0; $j < count($stopword_list); $j++)
	{
	$stopword = trim($stopword_list[$j]);

		if ( $mode == 'post' || ( $stopword != 'not' && $stopword != 'and' && $stopword != 'or' ) )
		{
			$entry = str_replace(' ' . trim($stopword) . ' ', ' ', $entry);
		}
	}
}

/*
// Original
$entry1 = preg_replace('/[ ]([\S]{1,2}|[\S]{21,})[ ]/',' ', $entry);
echo('1.: ' . $entry1 . '<br />');
// Code von Gerome phpBB.de
$entry2 = preg_replace('/(\b)([\S]{1,2}|[\S]{21,})(\b)/',' ', $entry);
echo('2.: ' . $entry2 . '<br />');
*/
// Code von Lese phpBB.com
$entry = str_replace('*', ' ', $entry);
$entry3 = preg_replace('/(?<= )([\S]{1,2}|[\S]{21,})(?= )/',' ', $entry);
echo('3.: ' . $entry3 . '<br />');

?>
Resultat:
3.: aber
D.h. der Code, der die Wörter per search_stopwords.txt filtern soll ist auch fehlerhaft.

Gruß



EDIT:
Die Lösung dafür wäre die gleiche wie zuvor:

Code: Alles auswählen

$entry = preg_replace('/(?<= )' . trim($stopword) . '(?= )/', ' ', $entry);
Wirklich komisch, warum dieser Bug bisher noch nicht behoben wurde.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“