Avatar billede qualon1 Nybegynder
14. maj 2006 - 21:24 Der er 8 kommentarer

Replace ikke i html koder

Hej

Jeg er ved at lave en funktion som tager hele indholdet af en side og den skal så markere et søgeord $find. Problemet er at hvis det søgeord fx er "html" markeres <html> også ved
eregi_replace($find, "<font style=\"background: #ffed73;\">".$find."</font>", $content);
Jeg ville gerne hvis funktione ville se bort fra alt mellem < og > og disse skal selvfølgelig heller ikke kunne markeres... Er det muligt?
Avatar billede olebole Juniormester
15. maj 2006 - 01:31 #1
<ole>

$s = [STRENG MED HTML-INDHOLD];
$s = preg_replace("<[^>]*>", "", $s);
// Nu er der ingen HTML-tags i strengen

/mvh
</bole>
Avatar billede olebole Juniormester
15. maj 2006 - 01:32 #2
- bahhh ... jeg læste spm'et forkert. Glem det  :)
Avatar billede olebole Juniormester
15. maj 2006 - 01:34 #3
- eller det kommer zq anpå, hvordan spm'et skal læses ... explain, please  =)
Avatar billede qualon1 Nybegynder
15. maj 2006 - 08:48 #4
jeg har følgende string:
<html>
<body bgcolor=#000000>
<font color=#ffffff>Hej, her er en masse html kode</font>
</body>
</html

jeg vil så gerne have en funktion som markere et bestemt søgeord, vi siger søgeordet er "html" bare for at vise eksemplet. Med en almindelig eregi_replace() funktion vil <html> blive ændret, og det skal den ikke. Den skal altså kun replace på indholdet på siden, men udskrive den originale string, bare med de enkelte replace
Avatar billede qualon1 Nybegynder
15. maj 2006 - 14:00 #5
jeg har makket lidt med det her:
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $out, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "<pre>".htmlentities($val[3])."</pre>";
$pos = strpos(strtolower($val[3]), strtolower($_GET[find]));
if($pos === false) { } else {

$val[3] = eregi_replace($_GET[find], "<font style=\"background: #ffed73;\">".$_GET[find]."</font>", $val[3]);
$replace = $val[1] . $val[3] . $val[4];
$out = eregi_replace($val[0], $replace, $out);
}
}
men den vil sku ikke gøre det rigtigt
Avatar billede olebole Juniormester
16. maj 2006 - 04:56 #6
Jeg lavede engang et JavaScript, der kan det samme, til en anden bruger:
    http://www.eksperten.dk/spm/637659#rid5702540

- det kunne du anvende sådan i et PHP-dokument:

<script type="text/JavaScript">
function highLight(wrd, cont) {
    var rng, rng2;
    rng = rng2 = document.body.createTextRange();
    rng.moveToElementText(cont);
   
    while (rng.findText(wrd)) {
        if (rng.offsetTop>cont.offsetTop+cont.offsetHeight) break;
        rng.pasteHTML("<span class=\"yellow\">"+rng.text+"</span>");
        rng.collapse(false);
        rng2 = rng.duplicate();
        rng.moveToElementText(cont);
        rng.setEndPoint("StartToEnd", rng2);
    }
}

window.onload = function() {
    highLight("<?=$word?>", document.body)
}
</script>
Avatar billede olebole Juniormester
16. maj 2006 - 04:58 #7
- men det skal stadig udvides til også at understøtte FF's rangemodel. Det orker jeg ikke i skrivende stund  :)
Avatar billede qualon1 Nybegynder
20. maj 2006 - 12:32 #8
olebole -> tak jeg fik svar i den tråd du henviser til, har dog et problem med at min menu i <ul></ul> ændre sin margin til 100px når det script køres, men det må jeg kigge på... Bare læg svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester