zoekwoorden markeren (Opgelost)
luchtpost - 28/05/2008 14:26 (laatste wijziging 28/05/2008 14:29)
PHP interesse
Beste sitemasters,
Graag zou ik gezochte woorden op mijn site in de weblogentries markeren. Hoe doe ik dat?
mvg
15 antwoorden
Gesponsorde links
luchtpost - 28/05/2008 14:32 (laatste wijziging 28/05/2008 14:32)
PHP interesse
Nee nee, er wordt gezocht via een scriptje op mijn site, niet via google.
Stijn - 28/05/2008 14:32
PHP expert
Geef een parameter mee in de URL, bv: ?highlight=php+zoeken. Je explode dan alles op het plus teken en vervangt ieder woord van de array in de tekst met een kleur. Zo zou het eruit kunnen zien:
<?
$words = explode('+' , $_GET['highlight']);
foreach( $words as $word ) {
$tekst = str_replace($word , '<b><font color="red">' . $word . '</font></b>' , $tekst);
}
<?
$words = explode ( '+' , $_GET [ 'highlight' ] ) ;
foreach ( $words as $word ) {
$tekst = str_replace ( $word , '<b><font color="red">' . $word . '</font></b>' , $tekst ) ; }
luchtpost - 28/05/2008 14:41
PHP interesse
Dankuwel! Maar hoe maak ik die str_replace ongevoelig voor hoofdletters?
luchtpost - 28/05/2008 14:50 (laatste wijziging 28/05/2008 15:01)
PHP interesse
preg_replace marcheert niet.
EDIT: Met eregi_replace worden de woorden met hoofdletter ook vervangen maar krijgen ze dus ook een kleine letter.
Is er een manier om de hoofdletter te behouden, maar het woord toch rood te maken?
Joost - 28/05/2008 15:58 (laatste wijziging 28/05/2008 15:58)
PHP expert
Deze kan wel;
<?
$words = explode('+' , $_GET['highlight']);
foreach( $words as $word ) {
$tekst = str_replace(strtolower($word) , '<b><font color="red">' . $word . '</font></b>' , $tekst);
}
?>
<?
$words = explode ( '+' , $_GET [ 'highlight' ] ) ;
foreach ( $words as $word ) {
}
?>
strtolower zet alles in kleine letters
luchtpost - 28/05/2008 16:47 (laatste wijziging 28/05/2008 17:05)
PHP interesse
Dat laatste begrijp ik niet helemaal.
De bedoeling is om woorden die beginnen met een hoofdletter (bv S itemasters) niet te vervangen door s itemasters als er gezocht is op s itemasters met een kleine letter.
Dus dat woorden met een hoofdletter behouden blijven.
compudoc - 28/05/2008 17:13 (laatste wijziging 28/05/2008 17:14)
PHP beginner
misschien str_ireplace ipv str_replace (volgensmij is ireplace namelijk hoofdletter ongevoelig)
<?
$words = explode('+' , $_GET['highlight']);
foreach( $words as $word ) {
$tekst = str_ireplace($word , '<b><font color="red">' . $word . '</font></b>' , $tekst);
}
?>
<?
$words = explode ( '+' , $_GET [ 'highlight' ] ) ;
foreach ( $words as $word ) {
$tekst = str_ireplace( $word , '<b><font color="red">' . $word . '</font></b>' , $tekst ) ;
}
?>
str_ireplace, werkt alleen bij PHP5+
luchtpost - 28/05/2008 17:21 (laatste wijziging 28/05/2008 17:23)
PHP interesse
nee, dat geeft hetzelfde resultaat als eregi_replace
en ik heb php 5
ik bedoel dus gewoon dat s itemasters wordt vervangen door s itemasters (maar dan in 't rood) en S itemasters door S itemasters (maar dan in 't rood)
Rik - 28/05/2008 17:32 (laatste wijziging 28/05/2008 17:54)
Crew algemeen
Er is op de vorige bladzijde besproken dat dat niet werkt.
Volgens mij bedoelt de TS dit:
$string = 'Op Sitemasters leer je over PHP en Javascript';
$words = array('sitemasters', 'php', 'javascript');
foreach ($words as $word) {
$string = preg_replace('/' . preg_quote($word) . '/i', '<span style="color: red">$0</span>', $string);
}
echo $string;
$string = 'Op Sitemasters leer je over PHP en Javascript' ;
$words = array ( 'sitemasters' , 'php' , 'javascript' ) ; foreach ( $words as $word ) {
}
Edit:
Kleine fix om de regexp iets korter te maken.
Martijn - 28/05/2008 17:37
Crew PHP
er staat als je iets lager kijkt een hoofdletter gevoeloze oplossing ;)
yetti4 - 28/05/2008 18:06
JS interesse
Boukefalos schreef:
Ik snap niet hoe jij aan de status PHP expert komt! Â
Â
Lekker veel onnuttige topics posten zoals dit
luchtpost - 28/05/2008 19:17
PHP interesse
Dankuwel Boukefalos!
Gesponsorde links
Dit onderwerp is gesloten .