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("<box size=","<div style=border:", $description); $description = str_replace("color=;","px solid ", $description); $description = str_replace("width=;","; width:", $description); $description = str_replace("</box>","</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?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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);
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 ); :)
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; }
25. februar 2005 - 17:52
#4
:) mange mange mange tak :) vil jeg prøve, evt kig forbi senere
www.unsafe.dk ;)
25. februar 2005 - 18:00
#5
Hov du får lige et svar ;)
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 :/
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> :)
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?
26. februar 2005 - 19:52
#9
Jamen så smid koden her?
27. februar 2005 - 01:48
#10
den er for lang tror jeg, msn@unsafe.dk, du er rigtig rar.
27. februar 2005 - 11:01
#11
Lav en smilies.phps og smid en URL?
27. februar 2005 - 16:40
#12
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.
27. februar 2005 - 17:38
#15
:O ok, jeg kan vel prøve
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 } ?>
27. februar 2005 - 19:08
#17
Jeg kan ikke se smilie2.txt ? Jeg får en 404 Not Found...
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']...
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
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
27. februar 2005 - 22:42
#21
Vent nu lige lidt
27. februar 2005 - 22:43
#22
Jeg matcher jo på < og >, er du sikker på at de ikke på det tidspunkt er < og > ?
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("<","<", $description); $description = str_replace(">",">", $description); Har nu indsat $description = str_replace(":Q","!TESTER!TESTER!", $description); Kig i min profil det virker godt.
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( "/<box(.*?)>(.*?)<\/box>/is", $text, $matches ) )
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("<font","<font", $description); $description = str_replace("color=;","color=", $description); $description = str_replace("face=;","face=", $description); $description = str_replace("size=;","size=", $description); $description = str_replace("</font>","</font>", $description); $description = str_replace(">",">", $description); Kan du så måske lave om i den font kode så jeg både kan bruge box'en og font koderne :P?
28. februar 2005 - 18:12
#26
Eller flyt doReplace() op før font-koden ;P
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
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>
Vi tilbyder markedets bedste kurser inden for webudvikling