Avatar billede straszek Praktikant
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??
Avatar billede sukos Juniormester
12. august 2004 - 11:35 #1
$row["tekst"] = htmlentities($row["tekst"]);
$row["tekst"] = str_replace("[", "<", $row["tekst"]);
$row["tekst"] = str_replace("]", ">", $row["tekst"]);
Avatar billede straszek Praktikant
12. august 2004 - 11:57 #2
Ok men hvad så når jeg skal udskifte [color=red] med <font color="red"> ?
Avatar billede detox Nybegynder
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.
Avatar billede straszek Praktikant
12. august 2004 - 12:04 #4
Ja det måd du gerne :-)

Men hvordan flettes det ind i "sætningen"??
Avatar billede detox Nybegynder
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);
Avatar billede sukos Juniormester
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;
?>
Avatar billede straszek Praktikant
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
Avatar billede detox Nybegynder
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);
Avatar billede sukos Juniormester
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);
?>
Avatar billede straszek Praktikant
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ådan
rød
Avatar billede detox Nybegynder
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 tekst
Tekst 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);
?>
Avatar billede detox Nybegynder
12. august 2004 - 13:05 #12
Men faktisk kan jeg bedst li' denne løsning:

<?php
$message = 'Almindelig tekst
Tekst 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;
?>
Avatar billede coderdk Praktikant
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 );
Avatar billede coderdk Praktikant
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 );
Avatar billede coderdk Praktikant
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 );
Avatar billede straszek Praktikant
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?
Avatar billede detox Nybegynder
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;
?>
Avatar billede coderdk Praktikant
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 ;)
Avatar billede detox Nybegynder
13. august 2004 - 02:59 #19
coderdk -> Måske fordi du har overset 'ligmed' tegnet i fx: [color=red]?
Avatar billede detox Nybegynder
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>"
);
Avatar billede coderdk Praktikant
13. august 2004 - 09:05 #21
Joh, men jeg brugte jo ikke = i mit eksempel ;)
Avatar billede straszek Praktikant
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 :-)
Avatar billede detox Nybegynder
01. september 2004 - 14:51 #23
Tja, hvis jeg har bidraget til en løsning vil jeg da godt være med ;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