Avatar billede sorensen_123 Nybegynder
14. april 2007 - 13:06 Der er 12 kommentarer og
1 løsning

Lidt BBCode

Hejsa,

Jeg sidder og laver noget bb-code, men mangler lidt...

Her er min kode:
<?
                $string = $_POST[tekst];
                $simple_search = array(
                                '/\[b\](.*?)\[\/b\]/is',                               
                                '/\[i\](.*?)\[\/i\]/is',                               
                                '/\[u\](.*?)\[\/u\]/is'
                                );

        $simple_replace = array(
                                '<b>$1</b>',
                                '<i>$1</i>',
                                '<u>$1</u>'
                                );
        $str = preg_replace ($simple_search, $simple_replace, $string);
        $text = ereg_replace('[a-zA-Z]+://(([.]?[a-zA-Z0-9_/-])*)',
        '<a href="\\0">\\1</a>',$str);

        echo $text;
?>

Jeg vil gerne have, at man kan skrive:
[img src="billeder/hej.jpg"]
og så skal den så udskrive det som
<img src="billeder/hej.jpg">

Og vil også have at den ikke skal tillade andre tags end:
<b>, </b>
<i>, </i>
<u>, </u>
<img>
<a>,</a>

Dvs. at ting som <script> osv ikke kommer ind..

Kan det lade sig gøre?
Avatar billede johan.o Nybegynder
14. april 2007 - 15:29 #1
Måske sådan her...

Først fjernes alle 'rigtige' tags...

$string=preg_replace("/<.*?>/", "", $string);

Så laves de midlertidige tags om til noget 'rigtigt'..

$simple_search = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[i\](.*?)\[\/i\]/is',
'/\[u\](.*?)\[\/u\]/is'
);

$simple_replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<u>$1</u>'
);

$string = preg_replace ($simple_search, $simple_replace, $string);

Så er der img tag'et..

$string=preg_replace("/\[img src=\"(.*?)\"\]/", "<img src=\"$1\">", $string);

Hvis ovenstående virker som forventet :) så fjernes alle <..> tags, og [..] tags som du har defineret i array'et ændres til <..> tags, og til sidst ændres [img src=".."] til <img src=".."> Det betyder at dette tag <script> slettes, mens dette [script] bliver stående.

Men lad høre om det virker, er ikke testet.

Mvh. Johan
Avatar billede johan.o Nybegynder
14. april 2007 - 15:32 #2
Hvis du også vil have slettet alle [..] tag's, som ikke er 'konverteret' til sidst kan du måske bruge denne her..

$string=preg_replace("/\[.*?\]/", "", $string);

Mvh. Johan
Avatar billede johan.o Nybegynder
14. april 2007 - 15:38 #3
Ja okay, så lige at du også vil have <a> og </a> tag's med...

$string=preg_replace("/\[a(.*?)\](.*?)\[/a\]/", "<a$1>$2</a>", $string);

...måske :)....

Mvh. Johan
Avatar billede sorensen_123 Nybegynder
15. april 2007 - 12:11 #4
Hej Johan..

Den eneste jeg får er ved $string=preg_replace("/\[a(.*?)\](.*?)\[/a\]/", "<a$1>$2</a>", $string);, den skriver:
Warning: preg_replace(): Unknown modifier 'a' in C:\WM\www\xxxxxx\xxxx.php on line 44.

Tænkte på om du også vidste hvordan man får automatisk linjeskift i udskriften med php.
For hvis jeg skriver noget i textarea'en og så har nogle steder hvor jeg har linjeskift, bliver det bare vist som én linje i min php udskrift? Er der en funktion til at gøre det automatisk??
Avatar billede johan.o Nybegynder
15. april 2007 - 15:01 #5
Ja okay, det er vist sådan her..

$string=preg_replace("/\[a(.*?)\](.*?)\[\/a\]/", "<a$1>$2</a>", $string);

...måske...:)

Linjeskift...hmm...prøv med php funktionen nl2br()..

Mvh. Johan
Avatar billede sorensen_123 Nybegynder
15. april 2007 - 17:30 #6
Hej,

Det med nl2br virkede! Havde sku helt glemt den funktion!! Takker!

Kan dog ikke få det med [a] osv til at virke...

Kunne du evt. lave sådan at man skrev Tekst??

Jeg vil selvfølgelig forhøje points med 10..
Avatar billede johan.o Nybegynder
15. april 2007 - 18:13 #7
Hmm...dette her virker da...

<?php

$string1="en masse bla vla og så [a href='link']Target[/a] og så en masse bla vla.";

$string2=preg_replace("/\[a(.*?)\](.*?)\[\/a\]/", "<a$1>$2</a>", $string1);

echo "<pre>".$string1."</pre>";
echo "<pre>".$string2."</pre>";

?>

..men det er muligt det skyldes sammenhængen med ovenstående...så vis den kode du bruger for øjeblikket.

Mvh. Johan
Avatar billede sorensen_123 Nybegynder
15. april 2007 - 18:45 #8
Virker stadig ikke..

Min kode ser således ud:
<?
                $string = $_POST[tekst];

                $string=preg_replace("/<.*?>/", "", $string);
               
                $simple_search = array(
                                '/\[b\](.*?)\[\/b\]/is',                               
                                '/\[i\](.*?)\[\/i\]/is',                               
                                '/\[u\](.*?)\[\/u\]/is'
                                );

        $simple_replace = array(
                                '<b>$1</b>',
                                '<i>$1</i>',
                                '<u>$1</u>'
                                );
                     
        $string = preg_replace ($simple_search, $simple_replace, $string);
        $string=preg_replace("/\[img src=\"(.*?)\"\]/", "<img src=\"$1\">", $string);
        $string=preg_replace("/\[.*?\]/", "", $string);
        $string=preg_replace("/\[a(.*?)\](.*?)\[\/a\]/", "<a$1>$2</a>", $string);
       
        $string = eregi_replace("#smiley_glad","<img src=images/tekstboks/smileys/glad.gif border=0>",$string);
        $string = eregi_replace("#smiley_vred","<img src=images/tekstboks/smileys/vred.gif border=0>",$string);
       
        echo nl2br($string);
?>
Avatar billede johan.o Nybegynder
15. april 2007 - 20:50 #9
Ja okay du skal lige bytte om på de to linjer her..

$string=preg_replace("/\[.*?\]/", "", $string);
$string=preg_replace("/\[a(.*?)\](.*?)\[\/a\]/", "<a$1>$2</a>", $string);
       
..så der står..

$string=preg_replace("/\[a(.*?)\](.*?)\[\/a\]/", "<a$1>$2</a>", $string);
$string=preg_replace("/\[.*?\]/", "", $string);
       
Lad høre om det hjælper.

Mvh. Johan
Avatar billede sorensen_123 Nybegynder
16. april 2007 - 15:10 #10
Super! Tak for hjælpen - det virker sku nu!

Kan du smide svar??
Avatar billede johan.o Nybegynder
16. april 2007 - 16:12 #11
Ja, mon dog ikke ? :)

Kommer her.

Mvh. Johan
Avatar billede sorensen_123 Nybegynder
16. april 2007 - 21:41 #12
Og så endnu en gang tak for hjælpen ;)
Avatar billede johan.o Nybegynder
16. april 2007 - 22:30 #13
Velbekomme og også tak for points :)

Mvh. Johan
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