Avatar billede avminarm Juniormester
28. februar 2003 - 21:50 Der er 9 kommentarer og
1 løsning

punkter midt i strengen skal highligtes

Hejsa

Sidder og laver et system til at lave php tutorials i - jeg leger lidt med highligt_string og det virker helt fint med at highligte en streng hentet i DB. Mit problem er at hvis jeg skriver noget alm. tekst bliver det jo også highligted, dvs det der skal være med f.eks fed står mellem <b>bla</b> og det skal det ikke!!

dvs jeg vil gerne have dele af strengen fortolket af highligt_string - jeg kan ikke hitte ud af hvordan hulen jeg gør det? - jeg har prøvet med split, men kan ikke få det til at virke - nogen forslag!
Avatar billede Slettet bruger
28. februar 2003 - 22:02 #1
$string = "<?php
echo \"Her fortolkes\"
?>
echo \"Her fortolkes IKKE\";";
highlight_string($string);
Avatar billede Slettet bruger
28. februar 2003 - 22:14 #2
Arh ser hvad du mener!?
Håber det her kan hjælpe dig!?
<?php
$string = "
Test <IKKEFORTOLKES><b>blabla</b></IKKEFORTOLKES>
<?php
    echo \"TEST\";
?>
bla bla
<IKKEFORTOLKES>bla bla</IKKEFORTOLKES>
<?php
echo \"TEST\";
?>
";
$list = explode("<IKKEFORTOLKES>", $string);
$highstring="";
foreach($list as $value)
{
    $strings = explode("</IKKEFORTOLKES>",$value);
    $highstring .= $strings[0].highlight_string($strings[1], true);
}
echo $highstring;
?>
Avatar billede avminarm Juniormester
28. februar 2003 - 22:23 #3
regin>> det kan temlig sikkert bruges - kigger nærmere på det ;-)
Avatar billede Slettet bruger
28. februar 2003 - 22:25 #4
Smider lige et svar... så behøves du ikke spørge efter det, hvis det er!?
:P
Avatar billede avminarm Juniormester
28. februar 2003 - 22:53 #5
det virker helt perfekt, selvom jeg lige har "vendt den om" så jeg kun behøver at markere koden :o) - tusind tak
Avatar billede avminarm Juniormester
01. marts 2003 - 20:52 #6
lige et hurtigt sprg - jeg har lavet en funktion ud fra dit script - sådan at den finder de steder hvor der er php kode som skal fremhæves, MEN hvis jeg skriver alm. tekst mee <b> osv før den første [php] så highlighter den det?? (håber det er forståeligt) og derefter er der ingen probs - kan mna løse det på en fix måde?

funktion:
'''''''''
function codehighlight($str){
$list = explode("[php]",$str);
$highstring="";
foreach($list as $value){
    $strings = explode("[/php]",$value);
    $highstring .= highlight_string($strings[0], true).$strings[1];
}
echo $highstring;
}

indtil videre har jeg løst det ved at inden jeg smider en tekst i databasen tilføjes aller øverst [php][/php], men det virker lidt kluntet, synes jeg selv - og jeg tænkte det måske kunne gøres smartere?
Avatar billede Slettet bruger
02. marts 2003 - 05:11 #7
Håber det her kan bruges...

function codehighlight($str){
$list = explode("[php]",$str);
$highstring="";
$i=0;
foreach($list as $value){
    $strings = explode("[/php]",$value);
    if($i==0)
    {
        $highstring .= implode("", $strings);
    }
    else
    {
        $highstring .= highlight_string($strings[0], true).$strings[1];
    }
    $i++;
}
echo $highstring;
}
Avatar billede avminarm Juniormester
02. marts 2003 - 12:39 #8
det virker helt perfekt - tak - har du noget imod lige at forklare mig et par små ting - så jeg ikke bare bruger funktionen i blinde - vil helst gerne forstå ;o) - det er bare lige et par småting

function codehighlight($str){ //ok
$list = explode("[php]",$str); //man finder alle steder [php] er og får et array opdelt ud fra denne "opdeler"
$highstring=""; //hvorfor starte en tom streng?
$i=0; //tæller startes
foreach($list as $value){ //hvergang man finder [php] i list ...
    $strings = explode("[/php]",$value); // strings finder alle endelser[/php] og danner et array
    if($i==0) //hvis i=0 - vil den ikke altid være det første gang?
    {
        $highstring .= implode("", $strings); //indsætter intet - streng uændret
    }
    else
    {
        $highstring .= highlight_string($strings[0], true).$strings[1]; //highlight + strengen efter uden highlight -IK?
    }
    $i++; //plus 1
}
echo $highstring; //strengen udskrives
}
Avatar billede Slettet bruger
02. marts 2003 - 12:47 #9
function codehighlight($str){ //ok
$list = explode("[php]",$str); //man finder alle steder [php] er og får et array opdelt ud fra denne "opdeler"
$highstring=""; /*hvorfor starte en tom streng? Bare god skik når man bruger ".="*/
$i=0; //tæller startes
foreach($list as $value){ //"Hopper" igennem arrayet $list
    $strings = explode("[/php]",$value); // strings finder alle endelser[/php] og danner et array
    if($i==0) //hvis i=0 - vil den ikke altid være det første gang? Jo
    {
        $highstring .= implode("", $strings);
/*Modsat af explode(); "" bruges til at samle arrayet*/
    }
    else
    {
        $highstring .= highlight_string($strings[0], true).$strings[1];
/*highlight + strengen efter uden highlight -IK? Jo*/
    }
    $i++; //plus 1
}
echo $highstring; //strengen udskrives
}
Avatar billede avminarm Juniormester
02. marts 2003 - 13:00 #10
tak for undervisningen ;o)
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