Gå til innhold

hjelp til syntax - eregi_replace


Anbefalte innlegg

Videoannonse
Annonse

strålende... tror jeg:

 

$text = preg_replace("/($hl)/", "<span style=\"background:yellow\">\\1</span>", $innlegg[3]);

$text = preg_replace("#\[i\](.+?)\[/i\]#", "<i>\\1</i>", $text);

 

 

disse to fungerer ikke sammen. $hl = "hei", og $text = "hei hei [i ]hei[/i ]"

 

 

edit: bbcodes ble jo bbcodes i forumet her :blush:

Endret av fjartan
Lenke til kommentar

Du må huske på å escape $ med en \ foran i regexpen, og at [ I] ikke er det samme som [ i]. For å gjøre regexpen case insensitive, kan du legge til "i" etter #;

 

$text = preg_replace("#(\$hl)#", "<span style=\"background:yellow\">\\1</span>", $innlegg[3]);
$text = preg_replace("#\[I\](.+?)\[/I\]#i", "<i>\\1</i>", $text);

 

:)

Lenke til kommentar

beklager, dette fungerer dårlig. Istedenfor at jeg skal legge ut kode og de alternativer jeg har forsøkt, er det greit om jeg spør om en kodesnutt til følgende:

 

$text -> sjekke for bbcode -> sjekke for og evt highlighte $hl -> output

 

Det hadde vært fint. Litt kjipt når ting bare funker nesten.

Lenke til kommentar

Umm, kva er det du prøver å få til?

Koden din:

$text = preg_replace("/($hl)/", "<span style=\"background:yellow\">\\1</span>", $innlegg[3]);

Er gal etter min meining.

 

Kva er det du prøver å highlighte? Er det $hl, eller text mellom $hl og ein annen kode? Vennlegst forklar litt meir så skal eg se om eg kan skrive ein kode snutt til deg.

Lenke til kommentar

den siterte kodesnutten ovenfor fikk jeg tidligere her på forumet.

 

Jeg vil gjerne:

 

sjekke bbcode for [i ][/i ] (osv, med preg_replace), og highlighte $hl. I dette tilfellet er $hl = "hei" og $text = "hei hei [i ]hei[/i ]". Da burde alt bli gult + italic den siste "hei".

 

:hmm:

Endret av fjartan
Lenke til kommentar

@LoS : Nesten :D

 

Gikk litt fort her. Skal prøve å spørre enda enklere:

 

I forumet mitt kan man skrive inn [i ] for å få italic tekst, og hvis man søker etter noe, blir det lagret i variabelen $hl, som vil highlighte nevne tekst.

 

Altså; to forskjellige "pregger", som arbeider uavhengig av hverandre. Problemet med $hl-"preggen" ovenfor, var at den ikke fungerte under noen omstendigheter, og den la til <span></span> rundt alle mellomrom, noe som gjorde at $hl-"preggen" ikke fungerte.

 

Så det ja... :)

Lenke til kommentar

Nå har ikke jeg stor greie på ereg?replace i det hele tatt, men skulle ikke dette virke:

 

$text = preg_replace("/($hl)/", "<span style=\"background:yellow\">\\1</span>", $innlegg[3]);

$text = preg_replace("#\[i\](.+?)\[/i\]#i", "<emp>\\1</emp>", $text);

 

Har ikke testet det da... :blush:

Lenke til kommentar

$variable = eregi_replace("\[i\]([[:print:]]*)\[\/i\]","<i>\\1</i>",$variable);

$variable = eregi_replace("($hl)","<span style=\"background:yellow\">\\1</span>",$variable);

 

Den koden vil fungere, joffar sin kode ser ut til å være rett og. Men eg kan ikkje preg_replace ennå så eg kan ikkje sei det sikkert.

 

Edit:

Husk å gjør alt med ubb koden før du legger til style spanen rundt søkeorda (eller så kan den ødelegge ubb koden.

Endret av The Red Devil
Lenke til kommentar

Du må vel også sjekke at rekkefølgen er korrekt...

Slik at du ender opp med <span>tekst, tekst, <em>tekst</em></span>

i ditt tilfelle vil det ikke være noe problem siden span teksten er større enn i teksten, men i tilfeller der begge bare er ett ord, vil red devils kode føre til :

 

<i><span>tekst</span></i>

 

jeg vet ikke om dette er ett problem mh til validering eller ei, men tror at

 

<span><em>tekst</em></span> er mere korrekt.

Lenke til kommentar

Hmm, ja du har eit poeng der joffar. Og du har rett angående kode validering.

 

Problemet er bare at bb koden blir "ødelagdt" vist du tar den etter span eregi'en vist brukeren søker på feks i,b osv.

 

Løysningen på dette problemet er eg ikkje sikker på, kansje nokre nye regulare expressions eller str_replace som sjekker at syntaxen er rett?

 

Eller, den beste metoden vil være å bruke to str_replace for kvar bb kode og skifte ut den med nokre "tegn" før du kjøre span'en deretter skifte dei tilbake og kjøre bb koden.

 

EDIT:

//Skifte ut bb koden
$variable = str_replace('[i]','#',$variable);
$variable = str_replace('[/i]','/#',$variable);

//Merke ut søke orda
$variable = eregi_replace("($hl)","<span style=\"background:yellow\">\\1</span>",$variable);

//Skifte tilbake bb koden
$variable = str_replace('#','[i]',$variable);
$variable = str_replace('/#','[/i]',$variable);

//Tilslutt kjør bb koden
$variable = eregi_replace("\[i\]([[:print:]]*)\[\/i\]","<i>\\1</i>",$variable);

 

Husk å bruke nokre tegn du er sikker på at bruker ikkje vil søke på, eventuelt ikkje gje bruker lov til å søke på dei tegna.

Endret av The Red Devil
Lenke til kommentar

Ikke for å være vanskelig, :p men da tor jeg det ville være lettere å nedlegge forbud mot å søke etter enkle ord som er det samme som bbcode...

Det spørs jo også litt på hvordan søkemotoren er bygd opp.

Dersom søkemotoren fek søker på en hel streng, er det jo relativt lett å forby søk på enkle ord som b, i, qoute osv.. men dersom søkemotoren søker på hvert ord i en streng, som feks google, da blir jo det ett problem her også.

 

en annen ting som kanskje kan gjøres er at dersom en søker etter feks i, sjekker en først om i har haker lik eller at i er frittstående i vs el . Dersom den ikke er frittst[ende blir den ignorert...

 

Men som sagt det kommer litt an på hvordan søkemotoren er..

Lenke til kommentar

joffar: Det ville vært det letteste. Men eg klarer ikkje skrive ein eregi_replace som ikkje godtar [] rundt søkeordet. Vist nokon andre kan hjelpe tekst starter med det så hadde det våre flott.

 

Slik eg ser dette, så skal det være ein søke funksjon på eit newscript eller forum, som markerer ut søketeksten på sidene.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...