webForumDet fria alternativet

visa textstycke i sökresultat

PHP

5 svar · 373 visningar · startad av kittlos

Medlem sedan sep. 2002205 inlägg
Frågan#1

Jag har en sökfunktion som jag vill ska presentera resultaten ungefär som google, dvs om jag sökt ordet Coca Cola så ska resultatet se ut ungefär så här:

Titeln på artikeln
"Han var en av de första som provade Coca Cola i deras gäng. Redan som tonåring ville han...

Så jag vill att texten under titeln ska bestå av allt som kommer innan det sökta ordet och närmaste punkt (.) och sen ett bestämt antal tecken efter sökordet.

Går det att få till det på något sätt?

Jag hittar sökresultatet med sql frågan (WHERE text LIKE '%sokord%')

Medlem sedan sep. 2002205 inlägg
#2

Det måste förresten inte börja efter närmaste punkt. Det kan lika bra vara ett fast antal tecken för OCh efter sökordet, så att det blir samma för alla resultat.

Medlem sedan jan. 2001191 inlägg
#3

kolla upp funktionerna substr och strpos för att ta reda på var i innehållet ditt sökord är samt för att välja hur mycket innan och efter som skall användas.

Medlem sedan sep. 2002205 inlägg
#4

toppen. Hur räknar jag antalet bokstäver i sökordet (i variabeln $search) ?

Edit: Jag hittade det. Strlen.

(Hur får man det så fint länkat till php.net?)

Medlem sedan sep. 2002205 inlägg
#5

Okej nu gjorde jag så att den visar ett visst antal tecken före, och efter. Koden:

//----plocka ut texten kring sökresultatet, om sökresultatet finns i "text".
$text_pos = strpos($text,$search);
if($text_pos===FALSE)$show_text="";
else{
	$search_length=strlen($search);
	$add_value = $search_length+100;
	$start_pos = ($text_pos - 50);
	$show_text = substr($text,$start_pos,$add_value);
	$show_text = str_replace($search,'<font color=\"#CC0000\"><b>'.$search.'</b></font>',$show_text);
	}
//-------------------

Det blir dock ganska fult när den kapar mitt i ord. Finns det något bra sätt att känna av efter mellanslag, både i början och i slutet?

Medlem sedan jan. 2001191 inlägg
#6

strstr söker efter första förekomsten av en _nål_ i en höstack (t.ex. ett mellanslag).

Med hjälp av strrev som vänder på strängen borde du nog kunna lösa det lätt.

Kanske inte den snyggaste (bästa) lösningen men det borde nog gå :)

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)