Pröva:
$str = preg_replace( "'<(.*?)>(" . $Search . ")</(.*?)>'is", "<b>\\2</b>", $str );
Se bara till så att användare inte kan använda < och > i sina texter.
8 svar · 631 visningar · startad av Web-Tor
Jag använder den här koden för att markera sökträffar på sida:
<?
function highlight ($str, $Search){
if (isset($Search))
$str = preg_replace ( "/(.*?)(" . $Search . ")(.*?)/is", "\\1<b>\\2</b>\\3", $str );
return $str;
}
?>
<?=highlight($row[0], $Search)?>
Men det uppstår ett litet fel. Om texten som söks igenom ser ut så här:
En massa text <span class="text">står här<span>
Söker jag på 'text' så kommer ju källkoden se ut så här efter att sökordet markerats:
En massa <b>text</b> <span class="<b>text</b>">står här<span>
Och det blir ju inte så bra. Alltså:
Hur utesluter jag taggar ur min "highlight-funktion"???
Pröva:
$str = preg_replace( "'<(.*?)>(" . $Search . ")</(.*?)>'is", "<b>\\2</b>", $str );
Se bara till så att användare inte kan använda < och > i sina texter.
Nja... Det funkar inte. Ingenting markeras :q
Detta var precis vad jag letat efter Web-Tor.. Synd att det inte fungerar bara..
När jag kör det så blir det bara knas tyvärr.
ex:
$str = "Detta är text"
$search = "text"
detta ger....
$str = "Detta är en []"
Ser ingen som helst logik bakom detta men det kanske beror på att jag är kass på regexp också. Någon som har en lösning på detta. Det skulle underlätta.
Så här:
<?
function highlight ($str, $Search){
if (isset($Search))
$str = preg_replace ( "/(<.*?>|)([^<^>]*?)(".$Search.")([^<^]*?)(<.*?>|[^<^>]*?>)/mis", "\\1\\2<b>\\3</b>\\4\\5", $str );
return $str;
}
$str="En massa text <span class=\"text\">\nstår här<span>";
$Search="text";
echo highlight($str, $Search);
?>
tror jag att det skall fungera. Prova!
PS Det är inte så bra att lagra HTML:en i "databasen", det hade blivit mycket enklare som du lagrat texten för sig och HTML-koden för sig.... DS
/nicclas - https://www.frisim.com
Nu är jag tebaka från semestern och får ta tag i det här igen:
Din kod funkar inte till 100% Nicclas
Sättar man $str så här så blir det fortfarande fel:
$str="<p><img src=\"bild.gif\" alt=\"En bild med text på\"></p>";
Här kommer ordet 'text' i alt-texten att få <b>-taggar runt sig. :l
Det blir alltså fel när en tagg ligger i en annan utan att det finns några tecken mellan taggarna. Fattar ni?
Oj lite slarvigt, jag missade ett >-tecken där mitt i :)
Prova med detta:
<?
function highlight ($str, $Search){
if (isset($Search))
$str = preg_replace ( "/(<.*?>|)([^<^>]*?)(".$Search.")([^<^>]*?)(<.*?>|[^<^>]*?> )/mis", "\\1\\2<b>\\3</b>\\4\\5", $str );
return $str;
}
$str="<p><img src=\"bild.gif\" alt=\"En bild med text p\"></p>";
$Search="text";
echo highlight($str, $Search);
?>
/nicclas - https://www.frisim.com
Du é kung på regexp Nicke! :)
Vet att tråden är gammal men jag har ett problem med funktionen.
$str = preg_replace ( "/(<.*?>|)([^<^>]*?)( )([^<^>]*?)(<.*?>|[^<^>]*?> )/mis", "\\1\\2<font color=\"#FFFFFF\" class=\"i\">i\\3</font>\\4\\5", $str);
För att byta ut alla mellanslag mot i + mellanslag. Självklart ska det inte göras i html-koden eftersom den inte funkar då. Däremot funkar det inte riktigt som den ska. Den ersätter bara vissa mellanslag. Det verkar som det är det första mellanslaget efter \n\n.