Avatar billede dr_demento Nybegynder
15. december 2005 - 11:03 Der er 11 kommentarer og
1 løsning

html tags i "newsposting"

Hej eksperter.

Jeg har lavet et simpelt newsposting script, hvor en text bliver gemt i mysql og hentet igen via $article_text = str_replace("\n","<br>",$article_text);

Dette virker da også fint, i sin simple form.


Men hva nu, hvis jeg gerne ville ha lidt html tags ind, såsom <img> eller et link etc.
Er der en måde man kan forklare scriptet at alt der starter med "<" er html tags, eller noget helt andet?

Mvh, Christian
Avatar billede jaw Nybegynder
15. december 2005 - 11:05 #1
Hvad mener du? Jeg forstår ikke helt.

Og så til din linieskifter, så findes der faktisk en funktion beregnet til det: nl2br(); altså bare:

echo nl2br($article_text);

Men prøv lige at forklar igen hvad du vil :)
Avatar billede thesurfer Nybegynder
15. december 2005 - 11:14 #2
Du "laver" dine egne tags..

Eksempel:
Brugeren skriver:

http://www.eksperten.dk/img/elogo.png

som gemmes i databasen.

Når det hentes ud igen, erstatter du bare dit eget tag-format, med rigtig HTML kode..

På den måde, kan du undgå at brugeren indsætter en masse HTML kode, som ikke er tilladt.. du erstatter bare "<" med "&lt;" og ">" med "&gt;", når du gemmer i databasen..

/theSurfer
Avatar billede dr_demento Nybegynder
15. december 2005 - 12:12 #3
Hey jaw, og tak for tippet med nl2br!

Det jeg mener er præcis sådan som thesurfer beskriver.
hvad gør man så?
noget i stil med:
$beg_img = str_replace("$article_text","[img]";
$slt_img = str_replace("$article_text","[/img]";
$img = substr($article_text, $beg_img, $slt_img-$beg_img+6);
$link = substr($img, 5, $end-img - $begImg -5);
$htmlImg    = "<img src=$link>";
$article_text = str_replace($img, $htmlImg, $article_text);


?
Avatar billede thesurfer Nybegynder
15. december 2005 - 12:33 #4
Koden ser ikke helt rigtig ud..

Hvis du kan finde ud af RegExp, vil det klart være nemmere..
PHP er ikke lige min stærke side, så jeg kan kun komme med ideen.. ikke koden..

/theSurfer
Avatar billede dr_demento Nybegynder
15. december 2005 - 13:58 #5
Ok, jeg har kigget lidt rundt omkring, og det ser ud som om jeg har fat i noget med:

<?
$beg_img = substr_replace("[img]",'');
$slt_img = substr_replace("[/img]",'');
$img = substr_replace($article_text, $beg_img, $slt_img-$beg_img);
$link = substr_replace($img, $slt_img - $beg_img);
$htmlImg    = "<img src=$link>";
$article_text = substr_replace($img, $htmlImg, $article_text);
?>

For mig virker det logisk, men det virker ik.. billede bliver vist som <img src=>
:(
Avatar billede thesurfer Nybegynder
15. december 2005 - 14:12 #6
Det er da klart :-)
$link indeholder jo ikke noget :-)

For at kunne bruge den metode, skal du splitte teksten op, og arbejde med hver eneste [img]-området, via en loop.


Måske kan du nøjes med:

$article_text = substr_replace("[img]", "<img src='");
$article_text = substr_replace("[/img]", "'></img>");

I XHTML hedder det <img src="billede.jpg" />, i stedet for "... /></img"..

/theSurfer
Avatar billede dr_demento Nybegynder
15. december 2005 - 14:29 #7
Hey thesurfer, heheh ja du har fat i noget, sorry er lidt grøn på visse områder :)

Surfede lidt videre og fandt et interessant eksempel, der ligepræcis ligner det jeg har brug for:
<?
   
    function styletext ($article_text) {
       
        // Quotes
        $pattern[] = '/\[quote\](.*?)\[\/quote\]/i';
        $replace[] = '<blockquote><b>Citat</b>$1</blockquote>';

        // Quotes with source
        $pattern[] = '/\[quote=\"(.*?)\"\](.*?)\[\/quote\]/i';
        $replace[] = '<blockquote><b>Citat: $1</b>$2</blockquote>';
       
        // Bold
        $pattern[] = '/\[b\](.*?)\[\/b\]/i';
        $replace[] = '<b>$1</b>';
       
        // Italic
        $pattern[] = '/\[i\](.*?)\[\/i\]/i';
        $replace[] = '<i>$1</i>';
       
        // Underline
        $pattern[] = '/\[u\](.*?)\[\/u\]/i';
        $replace[] = '<u>$1</u>';
       
        // link_title
        $pattern[] = '/\(.*?)\[\/url\]/i';
        $replace[] = '<a href="$1" target="_blank">$2</a>';
       
        // [url]url_link

        $pattern[] = '/\[url\](.*?)\[\/url\]/i';
        $replace[] = '<a href="$1" target="_blank">$1</a>';
       
        // Image
        $pattern[] = '/\[img\](.*?)\[\/img\]/i';
        $replace[] = '<img src="$1">';
       
        // Perform replace
        $text = preg_replace($pattern, $replace, $article_text);
       
    return($article_text);
    }
?>

men laver jeg f.eks. en bliver det stadig vist i artiklen som [img]http://www.lalalala.dk/image.jpg

:(
Avatar billede dr_demento Nybegynder
15. december 2005 - 14:49 #8
Ahh nu virker ovenstående perfekt!
Dum variabel fejl jeg havde overset.

Men anyway, tak for hjælpen!
Avatar billede thesurfer Nybegynder
15. december 2005 - 14:57 #9
Er det iorden, hvis jeg smidet et svar?

/theSurfer
Avatar billede dr_demento Nybegynder
15. december 2005 - 15:01 #10
Jep jep du fik mig på sporet :-)
Avatar billede thesurfer Nybegynder
15. december 2005 - 15:04 #11
Svar lagt :-)

/theSurfer
Avatar billede thesurfer Nybegynder
15. december 2005 - 15:19 #12
Takker for points :-)

/theSurfer
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