12. august 2004 - 11:19
Der er
22 kommentarer og 1 løsning
Hjælp til hack af af phpBB forum
Jeg er ved at lave et forum på min side. Jeg har taget udgangspunkt i phpBB den grafiske del, men har ændret alt det bagvedliggende, for at få det til at passe ind i de øvrige funktioner på min side. Nå man opretter en ny post har man mulighed for at bruger fed, kursiv, og andre forud bestemte koder. Disse koder bliver gemt sammen med poste i som , [i] osv. eks. [b]dette er med fed Det jeg har brug for at få lavet er en funktion der når posten skal vises kan udskifte [b], [i] osv. med de respektive html koder <b>, <i> osv. Er der nogen der kan hjælpe i sommervarmen??
Annonceindlæg fra Bluecircle
12. august 2004 - 11:35
#1
$row["tekst"] = htmlentities($row["tekst"]); $row["tekst"] = str_replace("[", "<", $row["tekst"]); $row["tekst"] = str_replace("]", ">", $row["tekst"]);
12. august 2004 - 11:57
#2
Ok men hvad så når jeg skal udskifte [color=red] med <font color="red"> ?
12. august 2004 - 12:03
#3
Nu er <font> jo ved at være et forældet tag, så må jeg foreslå: <span style='color: red;'> istedet.
12. august 2004 - 12:04
#4
Ja det måd du gerne :-) Men hvordan flettes det ind i "sætningen"??
12. august 2004 - 12:12
#5
Fx: $str = htmlentities($str); $str = preg_replace("|\[(.?)\](.*)\[(/.?)\]|U", "<$1>$2<$3>", $str); $str = preg_replace("|\[color=(.*)\](.*)\[(/)color\]|U", "<span style='color:$1;'>$2<$3span>", $str);
12. august 2004 - 12:28
#6
Det kan også gøres med str_replace, og anbefales i manualen, da det er hurtigere. Men er så lidt mere "kompliceret" <?php $tekst = 'Noget tekst til at teste med , og lige noget rød tekst '; echo $tekst ."<p>"; $tekst = htmlentities($tekst); $arg = array("font=" => "span style=color:", "[" => "<", "]" => ">", "\n" => "<br>\n"); while(list($key, $val) = each($arg)) { $tekst = str_replace($key, $val, $tekst); } echo"<p>". $tekst; ?>
12. august 2004 - 12:44
#7
Jeg har problemer med at få det til at virker, måske fordi jeg ikke rigtig forstår hvad der foregår. Bruger jeg: $str = htmlentities($str); $str = preg_replace("|\[(.?)\](.*)\[(/.?)\]|U", "<$1>$2<$3>", $str); $str = preg_replace("|\[color=(.*)\](.*)\[(/)color\]|U", "<span style='color:$1;'>$2<$3span>", $str); Så bliver farverne rigtige, men fed, kursiv, osv, bliver ikke fortolket Bruger jeg : $message = htmlentities($message); $message = str_replace("[", "<", $message); $message = preg_replace("|\[(.?)\](.*)\[(/.?)\]|U", "<$1>$2<$3>", $message); $message = preg_replace("|\[color=(.*)\](.*)\[(/)color\]|U", "<span style='color:$1;'>$2<$3span>", $message); $message = str_replace("]", ">", $message); Så bliver fed kursiv osv fortolket men farverne ikke. Og hvordan med linje skift, de skulle gerne fortolkes også Søren
12. august 2004 - 12:45
#8
sukos -> Jeg ved ikke om det er mere kompliceret ;o) Men du kunne osse benytte dig af at str_replace() kan arbejde med array's, så du sparer while-løkken: $tekst = htmlentities($tekst); $find = array("font=", "[", "]", "\n"); $replace = array("span style=color:", "<", ">", "<br>\n"); $tekst = str_replace($find, $replace, $tekst);
12. august 2004 - 12:53
#9
Eller strtr() :O) <?php $tekst = 'Noget tekst til at teste med , og lige noget rød tekst '; echo"OPRINDELIG TEKST:<br>\n"; echo $tekst ."<p>"; $tekst = htmlentities($tekst); $arg = array("font=" => "span style=color:", "[" => "<", "]" => ">", "\n" => "<br>\n"); echo" STRTR:<br>"; echo strtr($tekst, $arg); ?>
12. august 2004 - 13:00
#10
$message = htmlentities($message); $find = array("font=", "[", "]", "\n"); $replace = array("span style=color:", "<", ">", "<br>\n"); $message = str_replace($find, $replace, $message); Denne kode laver fed, kursiv osv. som den skal linjeskift virker også, men farverne er ikke med. I html kilde koden står farverne sådanrød
12. august 2004 - 13:01
#11
sukos -> den sidste kan jeg så ikke lige få til at virke. straszek -> Jeg kan se problemet når man blander tag'sene. Dette eks. fungerer: <? $str = 'Almindelig tekstTekst med rød farve Fed tekst Kursiv Fed kursiv Fed kursiv blå '; $str = htmlentities($str); $str = preg_replace("|\[(b)\](.*)\[(/b)\]|U", "<$1>$2<$3>", $str); $str = preg_replace("|\[(i)\](.*)\[(/i)\]|U", "<$1>$2<$3>", $str); $str = preg_replace("|\[color=(.*)\](.*)\[(/)color\]|U", "<span style='color:$1;'>$2<$3span>", $str); echo nl2br($str); ?>
12. august 2004 - 13:05
#12
Men faktisk kan jeg bedst li' denne løsning: <?php $message = 'Almindelig tekstTekst med rød farve Fed tekst Kursiv Fed kursiv Fed kursiv blå '; $message = htmlentities($message); $find = array("color=", "[", "]", "/color"); $replace = array("span style=color:", "<", ">", "/span"); $message = nl2br(str_replace($find, $replace, $message)); echo $message; ?>
12. august 2004 - 13:22
#13
$lookfor = array( "/\[b\](.*?)\[\/b\]/i" ,"/\[i\](.*?)\[\/i\]/i" ); $replace = array( "<b>\\1</b>" ,"<i>\\1</i>" ); $dintext = "hejsa! Det er da lidt for vildt !!"; echo preg_replace( $lookfor, $replace, $dintext );
12. august 2004 - 13:28
#14
Kan lidt mere:
$lookfor = array(
"/\[b\](.*?)\[\/b\]/i"
,"/\[i\](.*?)\[\/i\]/i"
,"/\[color (.*?)\](.*)\[\/color\]/i"
,"/\[link (.*?)\](.*)\[\/link\]/i"
);
$replace = array(
"<b>\\1</b>"
,"<i>\\1</i>"
,"<span style='color: \\1'>\\2</span>"
,"<a href='\\1'>\\2</a>"
);
$dintext = "
hejsa! [color blue]Det er[/color] da
lidt for
vildt !! [link
http://www.eksperten.dk/spm/Programmering/Script/PHP/]Exp. php [/link]...";
echo preg_replace( $lookfor, $replace, $dintext );
12. august 2004 - 13:36
#15
Samme, men med en mere overskuelig (?) måde at strukturere søg/replace strenge:
$replacements = array(
"/\[b\](.*?)\[\/b\]/i" => "<b>\\1</b>"
,"/\[i\](.*?)\[\/i\]/i" => "<i>\\1</i>"
,"/\[color (.*?)\](.*)\[\/color\]/i" => "<span style='color: \\1'>\\2</span>"
,"/\[link (.*?)\](.*)\[\/link\]/i" => "<a href='\\1'>\\2</a>"
);
$lookfor = array_keys( $replacements );
$replace = array_values( $replacements );
$dintext = "
hejsa! [color blue]Det er[/color] da
lidt for
vildt !! [link
http://www.eksperten.dk/spm/Programmering/Script/PHP/]Exp. php [/link]...";
echo preg_replace( $lookfor, $replace, $dintext );
12. august 2004 - 13:47
#16
Coderdk > Tak for forslagt med det kan jeg slet ikke få til at virker. Jeg tror jeg holder mig til detox forslag, nu mangler jeg bare at finde ud af hvordan [url][/url] bliver til et klikbart link?
12. august 2004 - 21:41
#17
Prøv sådan:
<?php
$str = 'Almindelig tekst
Tekst med rød farve Fed tekst Kursiv Fed kursiv Eksperten Fed kursiv blå ';
$array = array("["=>"<", "]"=>">", "color="=>"span style=color:", "/color"=>"/span");
$str = str_replace(array_keys($array), array_values($array), htmlentities($str));
$str = preg_replace("/<url=(.*)>(.*)<\/url>/U", "<a href='
http://$1'>$2</a>" , $str);
$str = nl2br($str);
echo $str;
?>
13. august 2004 - 01:43
#18
Er lidt interesseret i hvilken fejl du fik med mit script, jeg prøvede at køre det, og der virkede det fint ;)
13. august 2004 - 02:59
#19
coderdk -> Måske fordi du har overset 'ligmed' tegnet i fx: [color=red]?
13. august 2004 - 03:06
#20
coderdk -> Med det rigtige replacements array virker det ;o)
$replacements = array(
"/\[b\](.*?)\[\/b\]/i" => "<b>\\1</b>"
,"/\[i\](.*?)\[\/i\]/i" => "<i>\\1</i>"
,"/\[color=(.*?)\](.*)\[\/color\]/i" => "<span style='color: $1'>$2</span>"
,"/\[url=(.*?)\](.*)\[\/url\]/i" => "<a href='
http://$1'>$2</a>" );
13. august 2004 - 09:05
#21
Joh, men jeg brugte jo ikke = i mit eksempel ;)
31. august 2004 - 13:49
#22
Undskyld det sene svar, har haft meget at se til: Coderdk: Det der var problemet med din løsning, var jeg manuelt skulle indsætte en ny linje for nye html tags, det er lidt uhensigtsmæssigt i længden. Jeg ved ikke hvordan vi skal klare point fordelingen, men dem der syndes de skal have point kan jo ligge et svar :-)
01. september 2004 - 14:51
#23
Tja, hvis jeg har bidraget til en løsning vil jeg da godt være med ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling