Willkommen in der Webstatt Zum Webstatt Blog und Stories
BNightSpeeder am 14.05.06 15: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="+") {
// 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");
?>


Mfg. BNS

netcup.de Warum gibt es hier Werbung?
milahu milahu am 14.05.06 16:23

Nimm str_ireplace() oder preg_replace().

BNightSpeeder am 14.05.06 18:51

Quote
Original von milahu
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.

Michael Michael am 15.05.06 12:03

UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+") {
// 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.

nuit nuit am 15.05.06 13: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*

Michael Michael am 15.05.06 13: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. Dann hätte es (aus PHP) jeweils nur einen Aufurf.

Michael

BNightSpeeder am 15.05.06 17:19

Quote
Original von Michael
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+") {
// 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.

Al3x0r Al3x0r am 15.05.06 17:20

Quote
Original von BNightSpeeder
[quote]Original von Michael
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+") {
// 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.[/quote]


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

Quote
Bei einer highlight suche Groß-und kleinschreibung ignorieren

BNightSpeeder am 15.05.06 17:44

Quote
Original von Al3x0r
[quote]Original von BNightSpeeder
[quote]Original von Michael
UNgefähr so:

function highlight_results($text, $query, $bg="#FFFF00", $split="+") {
// 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.[/quote]


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

Quote
Bei einer highlight suche Groß-und kleinschreibung ignorieren
[/quote]

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

Wasili am 15.05.06 17: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="+") {
// 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

BNightSpeeder am 15.05.06 18: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?

milahu milahu am 15.05.06 19:59

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

BNightSpeeder am 15.05.06 20:10

Fehler:

Quote
Unknown modifier ']'

milahu milahu am 15.05.06 20:17

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

BNightSpeeder am 17.05.06 13:29

nun wird nicht mehr der text sondern das angezeigt:

Quote
</</</</</</</</</</</


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

milahu milahu am 17.05.06 14:11

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

BNightSpeeder am 17.05.06 18: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!

Wasili am 17.05.06 19: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.

BNightSpeeder am 17.05.06 19: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!

Spark am 17.05.06 21:21

ich benutze auf einer von meinen seiten das hier:

function highlight_results($text, $query, $bg="#FFFF00", $split="+") {
$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?

BNightSpeeder am 18.05.06 13:38

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

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt