[php]highlight probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een functie geschreven die woorden in het rood weer geeft als je in de url ?hight=$woord zet. Nu heb ik alleen 1 probleem, en dat is dat het casesenitive is. Dus als ik test in de url zet, dan wordt alleen 'test' rood en 'Test' niet.

PHP:
1
2
3
4
5
6
<?
function high($bericht,$high) { 
$bericht = str_replace(''.$high.'', '<font color="#FF0000">'.$high.'</font>', $bericht);
return $bericht; 
}
?>


Dit is me functie, op php.net kwam ik str_ireplace tegen, maar die geeft een error.

[ Voor 12% gewijzigd door Verwijderd op 12-07-2003 16:39 ]


Acties:
  • 0 Henk 'm!

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Verwijderd schreef op 12 July 2003 @ 16:38:
Ik heb een functie geschreven die woorden in het rood weer geeft als je in de url ?hight=$woord zet. Nu heb ik alleen 1 probleem, en dat is dat het casesenitive is. Dus als ik test in de url zet, dan wordt alleen 'test' rood en 'Test' niet.

PHP:
1
2
3
4
5
6
<?
function high($bericht,$high) { 
$bericht = str_replace(''.$high.'', '<font color="#FF0000">'.$high.'</font>', $bericht);
return $bericht; 
}
?>


Dit is me functie, op php.net kwam ik str_ireplace tegen, maar die geeft een error.
Wat voor error dan 8)7

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 19:03
Waarom zet je die 'dubbele' quotes om de eerste parameter?

In principe hoort str_ireplace te werken volgens mij. Een ander alternatief is om zowel de zoektekst als het bericht tijdelijk naar uppercase te gooien. Dan matched dat iig altijd.

Acties:
  • 0 Henk 'm!

Verwijderd

met een regexp (wel iets trager maar eregi_replace is wel case insasative). Dus (incl update van zmn's opmerking)':
PHP:
1
2
3
4
5
6
<?
function high($bericht,$high) { 
$bericht = eregi_replace($high, "<font color=\"#FF0000\">".$high."</font>", $bericht); 
return $bericht; 
}
?> 

[ Voor 15% gewijzigd door Verwijderd op 12-07-2003 17:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

eborn schreef op 12 juli 2003 @ 16:41:
Waarom zet je die 'dubbele' quotes om de eerste parameter?

In principe hoort str_ireplace te werken volgens mij. Een ander alternatief is om zowel de zoektekst als het bericht tijdelijk naar uppercase te gooien. Dan matched dat iig altijd.
Dat is niet helemaal netjes...
Stel ik heb in het begin van een string: "Welkom op mijn website".
Alles naar ucase: "WELKOM OP MIJN WEBSITE".
Na replace: "[rood]WELKOM[/rood] OP MIJN WEBSITE".
Alles weer naar lcase: "[rood]welkom[/rood] op mijn website".
Die w is dan lcase terwijl hij ucase moet zijn.

Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 18-09 18:20

DUX

blijft ook nu voor Oranje

"ucfirst -- Make a string's first character uppercase"

Hmm, die gaat alleen maar op in dat ene voorbeeldje van je...

Als je de boel op functioneel niveau bekijkt, dan is de boel upper case zetten nog helemaal zo slecht nog niet. Want waarom moet die tekst rood worden: om gevonden te worden door de user omdat hij erop gezocht heeft. Het vinden van deze woorden wordt nog 's extra vergemakkelijkt als de woorden in hoofdletters staan.

[ Voor 80% gewijzigd door DUX op 12-07-2003 17:49 ]

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
hoezo maak je geen gebruik van preg_replace?

voorbeeldje:
$text = preg_replace('!text!i', '<b>\\0</b>', $text);

Uhm... ja


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

str_ireplace is PHP5 CVS-only (staat er ook bij op php.net)
Met een regular expression is dit echter ook te bereiken:

PHP:
1
2
3
4
function high($bericht,$high) { 
  $bericht = preg_replace('/'.preg_quote($high, '/').'/i', '<span style="color:#FF0000">$0</span>', $bericht); 
  return $bericht; 
}

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 19:03
Verwijderd schreef op 12 juli 2003 @ 17:41:
Dat is niet helemaal netjes...
Stel ik heb in het begin van een string: "Welkom op mijn website".
Alles naar ucase: "WELKOM OP MIJN WEBSITE".
Na replace: "[rood]WELKOM[/rood] OP MIJN WEBSITE".
Alles weer naar lcase: "[rood]welkom[/rood] op mijn website".
Die w is dan lcase terwijl hij ucase moet zijn.
Je hebt inderdaad gelijk. Ik was even in de war omdat ik dacht dat je de waarde niet daadwerkelijk naar uppercase gooit (dat is ook niet zo, maar je gebruikt verder wel het resultaat als zijnde uppercase ;))

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 12 juli 2003 @ 18:16:
str_ireplace is PHP5 CVS-only (staat er ook bij op php.net)
Met een regular expression is dit echter ook te bereiken:

PHP:
1
2
3
4
function high($bericht,$high) { 
  $bericht = preg_replace('/'.preg_quote($high, '/').'/i', '<span style="color:#FF0000">$0</span>', $bericht); 
  return $bericht; 
}
Na alles goed gelezen te hebben, leek dit me de beste oplossing. Alleen ben nu bij probleem 2 aangekomen :(

Bij het uitlezen van me berichten doe ik het zo

PHP:
1
2
if($high) $bericht = high($bericht,$high);
$bericht    = ''.ubb(stripslashes($bericht)).'';


Werkt prima, tot je een woord als $high opgeeft dat bv in een [ url = ][ / url] tag staat. Dikke html fouten

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
Dan vervang je die UBB tags toch eerst ;) en daarna pas die kleuren.
en daarnaast kan je checken of het niet in een html tag staat door te kijken of er b.v. > en < omheen staat zonder een < en > ertussen :)

Uhm... ja


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mmm ik voer nu eerst me bbcode script uit, en daarna het highlight gebeuren, maar zit nog steeds vol met html fouten. :(

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
dat klopt ;) daarom zeg ik ook dat je ff moet checken dat een replacement variabele niet tussen < en > ligt... is ff tricky met regexp... maar wel doenbaar(is dat wel nederlands? ;))

Uhm... ja


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 18-09 12:54
The_Eternal schreef op 13 July 2003 @ 22:07:
dat klopt ;) daarom zeg ik ook dat je ff moet checken dat een replacement variabele niet tussen < en > ligt... is ff tricky met regexp... maar wel doenbaar(is dat wel nederlands? ;))
offtopic:
te doen :)

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Wil je alsjeblieft afleren om je stringwaarden links en rechts met lege strings te concateneren? Je wint er niet mee en het is echt afschuwlijk lelijk. Als je per se het type van een variabele wil veranderen (wat hier dus niet nodig is) gebruik dan gewoon een cast of de strval() functie.
The_Eternal schreef op 13 July 2003 @ 22:07:
dat klopt ;) daarom zeg ik ook dat je ff moet checken dat een replacement variabele niet tussen < en > ligt... is ff tricky met regexp... maar wel doenbaar(is dat wel nederlands? ;))
Het is eenvoudiger als je het van de andere kant bekijkt: voor de te vervangen tekst moet eerst een > staan, of het begin van de string. Je kunt dus zoiets schrijven:
code:
1
s/(>|^)[^<]*?(woord)/<font>\2</font>/ig

De \2 gebruik je om de tweede gematchte tekst tussen haakjes te benaderen (en dus niet de hele gematchte tekst, zoals eerst). Het vraagteken achter het sterretje betekent dat de parser dat sterretje niet greedy moet matchen, maar dat weet de manual ook. :)

[ Voor 67% gewijzigd door Soultaker op 14-07-2003 01:23 ]

Pagina: 1