Avatar billede unsafe Nybegynder
25. februar 2005 - 16:19 Der er 27 kommentarer og
1 løsning

Hjælp med med str_replace

Har lidt problemer med at når man redigere din profil tekst skal man kunne skrive en kode der viser en box.

Dette er min kode

$description = str_replace("&lt;box size=","<div style=border:", $description);
$description = str_replace("color=;","px solid ", $description);
$description = str_replace("width=;","; width:", $description);
$description = str_replace("&lt;/box&gt;","</div>", $description);

Og dette skulle så være muligt at skrive denne kode:

<box size=1 color=#000000 width=200>Heej</box>

Og skulle så være muligt at vise en box, men som i vel kan se er det ikke lige noget jeg kan finde ud af, nogle der kan hjælpe?
Avatar billede detox Nybegynder
25. februar 2005 - 16:38 #1
Måske i den her stil:

$description = preg_replace("/<box size=(\d+) color=(#.{6}) width=(\d+)>(.*)<\/box>/", "<div style=\"border:$1px solid $2; width:$3\">$4</div>", $description);
Avatar billede coderdk Praktikant
25. februar 2005 - 17:15 #2
Her er en fleksibel en:

    function doReplace( $text )
    {
        $rep = array (
                "size" => "border: %spx solid black"
                ,"color" => "color: %s"
                ,"width" => "width: %spx"
                ,"bgcolor" => "background-color: %s"
            );

        if ( preg_match_all( "/<box([^>]*?)>(.*?)<\/box>/is", $text, $matches ) )
        {
            $n = count( $matches[0] );
            for ( $i = 0; $i < $n; $i++ )
            {
                $reparr = array();
                $arr = explode( " ", trim( $matches[1][$i] ) );
                foreach ( $arr as $item )
                {
                    list( $key, $val ) = explode( "=", $item );
                    if ( array_key_exists( $key, $rep ) )
                    {
                        $reparr[] = sprintf( $rep[ $key ], $val );
                    }
                }
                $real = '';
                if ( count( $reparr ) > 0 )
                {
                    $real = " style='" . implode( "; ", $reparr ) . "'";
                }
                $text = preg_replace( "/" . preg_quote( $matches[0][$i], "/" ) . "/", "<div$real>" . $matches[2][$i] . "</div>", $text );
            }
        }
        return $text;
    }
   
    $description = "hej med dig <box bgcolor=yellow>hhehehe</box> nice <box size=1 bgcolor=silver color=white width=200>en kasse</box> :)";
    echo doReplace( $description );

:)
Avatar billede coderdk Praktikant
25. februar 2005 - 17:17 #3
Lille opdatering, folk kunne få den til at gå i stykker ved at lave et felt uden = i altså: <box hej>med dig</box>:

    function doReplace( $text )
    {
        $rep = array (
                "size" => "border: %spx solid black"
                ,"color" => "color: %s"
                ,"width" => "width: %spx"
                ,"bgcolor" => "background-color: %s"
            );

        if ( preg_match_all( "/<box([^>]*?)>(.*?)<\/box>/is", $text, $matches ) )
        {
            $n = count( $matches[0] );
            for ( $i = 0; $i < $n; $i++ )
            {
                $reparr = array();
                $arr = explode( " ", trim( $matches[1][$i] ) );
                foreach ( $arr as $item )
                {
                    if ( strpos( $item, "=" ) > 0 )
                    {
                        list( $key, $val ) = explode( "=", $item );
                        if ( array_key_exists( $key, $rep ) )
                        {
                            $reparr[] = sprintf( $rep[ $key ], $val );
                        }
                    }
                }
                $real = '';
                if ( count( $reparr ) > 0 )
                {
                    $real = " style='" . implode( "; ", $reparr ) . "'";
                }
                $text = preg_replace( "/" . preg_quote( $matches[0][$i], "/" ) . "/", "<div$real>" . $matches[2][$i] . "</div>", $text );
            }
        }
        return $text;
    }
Avatar billede unsafe Nybegynder
25. februar 2005 - 17:52 #4
:) mange mange mange tak :) vil jeg prøve, evt kig forbi senere www.unsafe.dk ;)
Avatar billede coderdk Praktikant
25. februar 2005 - 18:00 #5
Hov du får lige et svar ;)
Avatar billede unsafe Nybegynder
25. februar 2005 - 18:02 #6
Kan ikke rigtigt få det til at vrike, har prøvet begge koder, jeg har insat det i et dokument der hedder smilie.php hvor blandt andet str_replace koderne til smilies ligger, men virker ikke :/
Avatar billede coderdk Praktikant
25. februar 2005 - 18:07 #7
Hvordan bruger du det? For hvis jeg kører mit eksempel virker det fint:

    $description = "hej med dig <box bgcolor=yellow>hhehehe</box> nice <box size=1 bgcolor=silver color=white width=200>en kasse</box> :)";
    echo doReplace( $description );

Producerer outputtet:

hej med dig <div style='background-color: yellow'>hhehehe</div> nice <div style='border: 1px solid black; background-color: silver; color: white; width: 200px'>en kasse</div> :)
Avatar billede unsafe Nybegynder
26. februar 2005 - 16:10 #8
Har har indsat scriptet i den fil jeg har mine andre koder der  erstatter :D med en smilie osv. msn@unsafe.dk (min msn), det ville være rigtigrigtig FEDT! hvis du gad at kigge på min smilie.php og måske fortælle hvorfor den ikke virker :O?
Avatar billede coderdk Praktikant
26. februar 2005 - 19:52 #9
Jamen så smid koden her?
Avatar billede unsafe Nybegynder
27. februar 2005 - 01:48 #10
den er for lang tror jeg, msn@unsafe.dk, du er rigtig rar.
Avatar billede coderdk Praktikant
27. februar 2005 - 11:01 #11
Lav en smilies.phps og smid en URL?
Avatar billede unsafe Nybegynder
27. februar 2005 - 16:40 #12
Avatar billede unsafe Nybegynder
27. februar 2005 - 16:41 #13
har også lavet en http://www.unsafe.dk/smilie.txt

hvis det nu var :)
Avatar billede coderdk Praktikant
27. februar 2005 - 16:54 #14
Uhm, hvis du bare indsætter min funktion i toppen af filen, efter <?php og i bunden af scriptet, før ?> indsætter:

$description = doReplace( $description );

Så burde det da virke.
Avatar billede unsafe Nybegynder
27. februar 2005 - 17:38 #15
:O ok, jeg kan vel prøve
Avatar billede unsafe Nybegynder
27. februar 2005 - 17:44 #16
Virker ikke :/ http://www.unsafe.dk/profiles.php?id=1 filen hedder nu smilie2.php / smilie2.txt i stedet. har gjordt som du sagde.

Dette er koden i profilerne, når den skal udskrive profil teksten:

<?php if ($rs["description"]) {
          include"smilie2.php"; ?>
              <?echo nl2br(''.stripslashes(hyperlinks($description)).'');?>
              <?php  } else {?>Denne bruger har ikke skrivet en profil tekst endnu!<?php } ?>
Avatar billede coderdk Praktikant
27. februar 2005 - 19:08 #17
Jeg kan ikke se smilie2.txt ? Jeg får en 404 Not Found...
Avatar billede coderdk Praktikant
27. februar 2005 - 19:09 #18
Så vidt jeg kan se fra din kodestump, så har du da ikke en $description, men en $rs['description']...
Avatar billede unsafe Nybegynder
27. februar 2005 - 22:27 #19
Ja, hvis man har skrevet en profiltekst så skal den vises. kan du jo se på if sætningen, idéen med den box er jo at brugerne skal kunne lave den i deres profil tekster.

http://www.unsafe.dk/smilie2.txt

sådan
Avatar billede coderdk Praktikant
27. februar 2005 - 22:42 #20
Det burde altså virke, det dér - Prøv lige at smide denne ind også:

$description = str_replace(":Q","!TESTER!TESTER!", $description);

og lav en :Q smily ;P
Avatar billede coderdk Praktikant
27. februar 2005 - 22:42 #21
Vent nu lige lidt
Avatar billede coderdk Praktikant
27. februar 2005 - 22:43 #22
Jeg matcher jo på < og >, er du sikker på at de ikke på det tidspunkt er &lt; og &gt; ?
Avatar billede unsafe Nybegynder
28. februar 2005 - 03:30 #23
Altså, jeg har disse på så man ikke bare kan skriv løs af html koder:

$description = str_replace("<","&lt;", $description);
$description = str_replace(">","&gt;", $description);

Har nu indsat $description = str_replace(":Q","!TESTER!TESTER!", $description);

Kig i min profil det virker godt.
Avatar billede coderdk Praktikant
28. februar 2005 - 04:26 #24
ja, men du er jo nødt til at lave min om jo - du har erstattet < og >:

if ( preg_match_all( "/&lt;box(.*?)&gt;(.*?)&lt;\/box&gt;/is", $text, $matches ) )
Avatar billede unsafe Nybegynder
28. februar 2005 - 17:29 #25
Jaaa, det virker :) tak, men så bliver jeg nød til at fjerne den sidste linje i denne font kode:

$description = str_replace("&lt;font","<font", $description);
            $description = str_replace("color=;","color=", $description);
            $description = str_replace("face=;","face=", $description);
            $description = str_replace("size=;","size=", $description);
            $description = str_replace("&lt;/font&gt;","</font>", $description);
        $description = str_replace("&gt;",">", $description);

Kan du så måske lave om i den font kode så jeg både kan bruge box'en og font koderne :P?
Avatar billede coderdk Praktikant
28. februar 2005 - 18:12 #26
Eller flyt doReplace() op før font-koden ;P
Avatar billede unsafe Nybegynder
28. februar 2005 - 19:31 #27
:D ja fandt jeg ud af :P tak. men vil gerne gøre sådan at man selv kan bestemme border farven :) kan du gøre det? der står jo normalt til solid black
Avatar billede coderdk Praktikant
28. februar 2005 - 19:52 #28
Mjah, så ville jeg nok lave den lidt om:

        $rep = array (
                "size" => "border: %spx solid"
                ,"bcolor" => "border-color: %s"
                ,"color" => "color: %s"
                ,"width" => "width: %spx"
                ,"bgcolor" => "background-color: %s"
            );

Så vil det virke på <box size=1 bcolor=red bgcolor=blue>hejsa</box>
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