Webstatt.org - Community seit 2006 - 2012 (2024?)

Bei einer highlight suche wird Groß-und kleinschreibung ignorieren

user-137
14.05.2006 13:41

Hallo,

bei volgendem Code wird der text hervorgehoben,nun wird leider keine Groß und kleinschreibung berücksichtigt, wie kann ich das ändern?
Ich habe leider keine function dazu gefunden.

<?php
function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$to = "<span style=\"background-color: ".$bg."\">";
$to.= $result."</span>";
$text = str_replace($result, $to, $text);
}
return $text;
}
$text = "Wer ander'n eine Bratwurst brät,
hat ein Bratwurstbratgerät.";
echo highlight_results($text, "Bratwurst+ein"zwinkern;
?>


Mfg. BNS

Avatar user-255
14.05.2006 14:23

Nimm str_ireplace() oder preg_replace().

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-137
14.05.2006 16:51

Original von user-255
Nimm str_ireplace() oder preg_replace().


str_ireplace() ist geht erst ab version 5, ich habe leider nur 4.2.2
preg_replace() ich verstehe nicht ganz wie ich das machen soll.

Avatar user-253
15.05.2006 10:03

UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$text = preg_replace("/$result/",'<span style="background-color: '.$bg.'">'.$result.'</span>',$text);
}
return $text;
}


// edit

Nicht $text sondern $result soll hervorgehoben werden.

Avatar user-271
15.05.2006 11:45

mhhh...frage ob man nicht einmal preg ausfuehren solll und dann das RegEx so zu machen:

/(result1|result2|result3|)/

ausserdem hast du einen fehler drin <D es muss ja nicht der ganze text gehighlighted werden <D

dann gibsch noch die moeglichkeit mit substr und einem strstr zu arbeiten <D
muesste man mal ausprobieren welche sachen am schnellsten sind *fg*

#!/bin/bash
traurig){ neutral:& };:
Avatar user-253
15.05.2006 11:51

Es muss natürlich $result heissen, nicht $text.
Allerdings wird ein Regex der Art (xxx|yyy|zzz|...) sehr langsam. Ich bezweifel ersthaft, dass er schneller wäre.
Es wäre aber einen Versuch wert, preg_replace je einen Array als Such- und Ersetzmuster zu übergeben. user-158n hätte es (aus PHP) jeweils nur einen Aufurf.

Michael

user-137
15.05.2006 15:19

Original von user-251el
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$text = preg_replace("/$result/",'<span style="background-color: '.$bg.'">'.$result.'</span>',$text);
}
return $text;
}


// edit

Nicht $text sondern $result soll hervorgehoben werden.


Leider wird Groß und Kleinschreibun weiterhin nicht beachtet.

Avatar user-118
15.05.2006 15:20

Original von user-137
Original von user-251el
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$text = preg_replace("/$result/",'<span style="background-color: '.$bg.'">'.$result.'</span>',$text);
}
return $text;
}


// edit

Nicht $text sondern $result soll hervorgehoben werden.


Leider wird Groß und Kleinschreibun weiterhin nicht beachtet.



Aber das ist doch genau das was du willst, oder habe ich den Titel falsch verstanden ?

Bei einer highlight suche Groß-und kleinschreibung ignorieren

Ich brauche keine Signatur
user-137
15.05.2006 15:44

Original von user-118
Original von user-137
Original von user-251el
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$text = preg_replace("/$result/",'<span style="background-color: '.$bg.'">'.$result.'</span>',$text);
}
return $text;
}


// edit

Nicht $text sondern $result soll hervorgehoben werden.


Leider wird Groß und Kleinschreibun weiterhin nicht beachtet.



Aber das ist doch genau das was du willst, oder habe ich den Titel falsch verstanden ?

Bei einer highlight suche Groß-und kleinschreibung ignorieren


Ich habe zweimal das wort nicht vergessen, mist, also sie wird nicht berücksichtigt, sorry.

user-343
15.05.2006 15:46

Ja, ignorieren will er. Wenn er Gross udn Kleinschreibung unterscheiden wolle könnet er ja einfach str_replace nehmen, deshalb:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
// Die Suchwörter sind im $query durch $split verbunden
// Bsp.: hallo+du+php-coder
$results = explode($split, $query);
foreach($results as $result) {
$text = preg_replace("/$result/i",'<span style="background-color: '.$bg.'">'.$result.'</span>',$text);
}
return $text;
}


Mit i-Modifier

user-137
15.05.2006 16:32

Ok, nun mein erstes Problem ist das was Groß ist wirt durch klein ersetzt und umgekehtr, es soll ja aber nur mariert werden!

2. Es werden HTML Tags angezeigt wenn das Wort oder der Buchstabe in einem Tag vorkommt, kann man das verhindern?

Avatar user-255
15.05.2006 17:59

$text = preg_replace('/[^</]?('.$result.'zwinkern/i', '<span class="hl">$1</span>', $text);

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-137
15.05.2006 18:10

Fehler:
Unknown modifier ']'

Avatar user-255
15.05.2006 18:17

peinlich, peinlich.. ?(
$text = preg_replace('/[^<\/]?('.$result.'zwinkern/i', '<span class="hl">$1</span>', $text);

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-137
17.05.2006 11:29

nun wird nicht mehr der text sondern das angezeigt:

</</</</</</</</</</</


und wenn ich was suche wird der text wieder angezeigt, aber nichts wird markiert!

Avatar user-255
17.05.2006 12:11

Jetz aber...
$text = preg_replace('/([^<\/]?)('.$result.'zwinkern([^>]?)/i', '$1<span class="hl">$2</span>$3', $text);

Ob der jetzt wohl geht..?

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-137
17.05.2006 16:26

nun wird der Text zerstükelt, als Big, angezeigt und an manchen stellen nicht, bei der suche ist es wider ok, aber nun wird wieder nichts gehiglightet!

user-343
17.05.2006 17:27

Vielleicht, als Ansatz, zuerst überprüfen ob überhaupt gesucht wurde und erst dann überhaupt den Filter verwenden?
So würdest du sicher auch Rechenzeit sparen, der Text muss ja nicht unsinnig durch preg_replace gelassen werden.
Ebenso würdest du ebendieses Problem beheben dass der Text zerstückelt wird.

user-137
17.05.2006 17:59

gut, das kann ich ja mit "isset" und if-else machen, nur wird dan trotzdem immer noch nichts markiert, wenn jetzt nichts markiert wird!

user-307
17.05.2006 19:21

ich benutze auf einer von meinen seiten das hier:

function highlight_results($text, $query, $bg="#FFFF00", $split="+"zwinkern {
$results = explode($split, $query);
foreach($results as $result) {
for($i = 0; $i <= 1; $i++) {
if($i == 0) { $result[0] = strtolower($result[0]); } else { $result[0] = strtoupper($result[0]); }
$to = "<span style=\"background-color: ".$bg."\">";
$to.= $result."</span>";
$text = str_replace($result, $to, $text);
}
}
return $text;
}


ich glaub das sollte so funktionieren wie du es willst, oder?

.., Spark
user-137
18.05.2006 11:38

Leider wird nu gar nichts mehr angezeigt! Auch nicht wenn ich suche!