Avatar billede Jakie Juniormester
27. august 2011 - 15:07 Der er 20 kommentarer og
1 løsning

Smileys osv til et forum?

Hej Eksperter.

Jeg vil gerne have smileys, fed, kursiv, linjeskift osv. til mit forum, men hvad er den letteste måde at få gjort det på?

på forhånd tak for hjælpen:)
Avatar billede olsensweb.dk Ekspert
27. august 2011 - 15:20 #1
hvis du har mulighed får at ligge din egen editor på forummet så prøv at google "php rte" http://www.google.dk/search?q=php+rte
feks
http://ckeditor.com/download
http://nicedit.com/ (kan ikke lige huske om den kan lave smileys)
Avatar billede heinzdmx Nybegynder
27. august 2011 - 15:22 #2
Er det et hjemmelavet system eller et af de af de kendte systemer?

Hvis det er hjemmelavet kan du jo kigge efter en af de funktioner der kan replace text, og så lave en replace for hver smiley.

:) skal så blive til <img src='gladsmiley.jpg'>
Avatar billede inteeeL Nybegynder
27. august 2011 - 16:00 #3
Hvis du ikke er så skarp inden for php, vil jeg anbefale ronols forslag. Der findes utallige editorer på internettet - som er gratis og lige til at gå til.

Ønsker du selv at kaste dig ud i det, er det en god idé at kigge på str_replace() og preg_replace().

Lad os sige, at du gerne vil have, at ":-)" og ":-(" bliver erstattet af henholdsvis en glad og en sur smiley, og at og bliver erstattet af bold-tagget. Du starter med at lave en funktion, hvor erstatningerne finder sted:

function BBcode( $b) {
  $b = str_replace(":-)", "<img src=\"gladsmiley.jpg\" alt=\"Glad\">", $b);
  $b = str_replace(":-(", "<img src=\"sursmiley.jpg\" alt=\"Sur\", $b);
  $b = preg_replace("/\[b\](.*?)\[\/b\]/", "<b>\\1</b>", $b);
}

Når du så hiver indlægget/kommentaren ud af databasen, skal du bare huske at kalde funktionen:

echo BBcode( $row[ 'txt']); (for eksempel)

Håber det hjalp..

Mvh Haris.
Avatar billede Jakie Juniormester
27. august 2011 - 16:20 #4
Tak for jeres svar :)

Jeg tog javascriptet fra http://nicedit.com/ det ude i højre side.

Problemet er at koderne bliver vist i browseren - så teksten får fx ikke den fede streg, men der står bare [b*]uden *[*/b]

hvordan kan det rettes? :)
Avatar billede Jakie Juniormester
27. august 2011 - 16:35 #5
Havde faktisk lavet min egen function bbcode, men jeg kunne ikke finde ud af at får den eksekveret, desværre :)

Men synes det andet har et bedre overview, så skal bare lige have løst det andet problem :)
Avatar billede olsensweb.dk Ekspert
28. august 2011 - 12:17 #6
mange link http://www.eksperten.dk/spm/942015 #4 (sidste link dødt)
#4 ??
#5 jeg har taget Deres demo02.html og barberet den ned
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Demo 2 : NicEdit Configuration</title>
</head>
<body>
<script src="../nicEdit.js" type="text/javascript"></script>
<script type="text/javascript">
bkLib.onDomLoaded(function() {   
    new nicEditor({fullPanel : true}).panelInstance('area2');   
});
</script>
da editoren tilsyneladende ikke kan lave smileys, har jeg taget coden fra http://www.cybergamerz.net/f62/114/php-function-replace-text-tags-smiley-images/ omskrevet den lidt og barberet den lidt ned for at spare plads
<form action="test.php" method="post">
<textarea cols="60" name="area2" id="area2">her er lidt fyld test :) det er ikke seriøst :( , så det er direkte til pladerballe nærradio </textarea>
<input type="submit" value="Submit">
</form>
</body>
</html>


test.php
<?php 
function smiley($text) {
        $s2 = "<img src='"; //Path to images folder
        $sm = "' alt=''>"; // Extension of the images
        $array = array(
            ':)'=>$s2.'gladsmiley.gif'.$sm,
            ':('=>$s2.'sursmiley.gif'.$sm
        );       
        return strtr(stripslashes($text), $array);           
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    </script>
</head>
<body>
<?php
$txt = $_POST["area2"];
echo smiley($txt);
?>
</body>
</html>


demo http://olsensweb.dk/test/niceditor/demos/ronols.html
Avatar billede Jakie Juniormester
29. august 2011 - 16:32 #7
Jeg har stadig det problem at browseren udskriver selve koden :)

Kan det være noget med database opsætningen?
Avatar billede olsensweb.dk Ekspert
29. august 2011 - 17:03 #8
Jeg har stadig det problem at browseren udskriver selve koden :)
et link til siden tak

er det denne code den udsriver på skærmen ??, så er det pga dit web hotel ikke understøtter short_open_tag http://dk.php.net/manual/en/ini.core.php#ini.short-open-tag mere, det bliver slået fra flerer og flerer stder
<?
bla bla
?>

det er bare at rette
<?
til
<?php alle steder
Avatar billede Jakie Juniormester
29. august 2011 - 19:28 #9
Idet er ikke helt der, hvor som fejlen ligger fejlen, tror jeg :)

<?php det har jeg alle steder :)

Her er linket til der hvor jeg lejer lidt med det :)
http://www.xn--trningkostudstyr-vob.dk/artikler/topic.php?id=9
Avatar billede olsensweb.dk Ekspert
30. august 2011 - 17:49 #10
#7
har du prøvet at google "php bbcode parser" http://www.google.dk/search?q=php+bbcode+parser
første link http://www.pixel2life.com/forums/index.php?/topic/10659-php-bbcode-parser/
en hurtig test med ovenstående bcode:

html
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
<script type="text/javascript"></script>
<form action="test.php" method="post">
<textarea cols="60" name="area2" id="area2">her er lidt fyld test :) det er ikke seriøst :( , så det er direkte til pladerballe nærradio </textarea>
<input type="submit" value="Submit">
</form>
</body>
</html>


test.php
<?php 
function smiley($text) {
        $s2 = "<img src='"; //Path to images folder
        $sm = "' alt=''>";
        $array = array(
            ':)'=>$s2.'gladsmiley.gif'.$sm,
            ':('=>$s2.'sursmiley.gif'.$sm
        );       
        return strtr(stripslashes($text), $array);           
}

// http://www.pixel2life.com/forums/index.php?/topic/10659-php-bbcode-parser/
function BBCode ($string) {
    $search = array(
        '@\[(?i)b\](.*?)\[/(?i)b\]@si',
        '@\[(?i)i\](.*?)\[/(?i)i\]@si',
        '@\[(?i)u\](.*?)\[/(?i)u\]@si',
        '@\[(?i)img\](.*?)\[/(?i)img\]@si',
        '@\[(?i)url=(.*?)\](.*?)\[/(?i)url\]@si',
        '@\[(?i)code\](.*?)\[/(?i)code\]@si'
    );
    $replace = array(
        '<b>\\1</b>',
        '<i>\\1</i>',
        '<u>\\1</u>',
        '<img src="\\1">',
        '<a href="\\1">\\2</a>',
        '<code>\\1</code>'
    );
    return preg_replace($search , $replace, $string);
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    </script>
</head>
<body>
<?php
$txt = $_POST["area2"];
// her kunne du evt ligge det i en db

// $txt = hent_fra_db()

$txt = BBCode($txt);
echo smiley($txt);
?>
</body>
</html>   


demo http://olsensweb.dk/test/experten/spm/945938/

jeg troede du havde opdateret din hjemmeside med en ny editor, derfor har jeg nu kun lavet eks med et text area, så det ligner det du har på din side så meget som muligt.

iøvrigt ser link 3 også rigtig interessant ud http://www.sitepoint.com/bb-code-php-application/
Jeg går ud fra, at du når ligger data i db husker at escape* dem for at hindre sql injection (håber ikke den får smadret nogle smiley's)

*
kan muligvis bruges http://dk.php.net/manual/en/function.mysql-real-escape-string.php
eller
når data ligges i db http://dk.php.net/manual/en/function.addslashes.php
når data hentes fra db http://dk.php.net/manual/en/function.stripslashes.php


hvis ovenstående ikke bringer din nærmere en løsning skal vi se coden for hvordan du ligger data i db og henter dem ud
Avatar billede olsensweb.dk Ekspert
30. august 2011 - 17:55 #11
nu fik jeg selvføgelig brugt de sammen bb coder som her på E :), så jeg ændre lige [ til ( og ] til ) så du kan se hvor der er bb codet
i html filen

<textarea cols="60" name="area2" id="area2">her er (i)lidt(/i) fyld test :) (i)det er (b)ikke seriøst(/b)(/i) :( , så det er direkte til pladerballe nærradio </textarea>
Avatar billede Jakie Juniormester
30. august 2011 - 22:19 #12
Hmm.. har prøvet et stykke tid at prøve at få det tilpasset til mit kode, men det er jo svært, så det lykkedes ikke :)

ja jeg bruger mysql_real_escape_string.

Hmm, tror du det vil hjælpe, hvis i fik kode?
Avatar billede olsensweb.dk Ekspert
31. august 2011 - 06:26 #13
>Hmm, tror du det vil hjælpe, hvis i fik kode?
ja
Avatar billede Jakie Juniormester
31. august 2011 - 16:24 #14
Okay,

form:

echo '<form method="post" action="">
                    Titel:<br/> <input class="nyhedsfelt" type="text" name="topic_subject" /><br />
                   
                    Kategori:<br />';
               
                echo '<select class="nyhedsselect" name="topic_cat">';
                    while($row = mysql_fetch_assoc($result))
                    {
                        echo '<option class="optionnyheder" value="' . $row['cat_id'] . '">' . $row['cat_name'] . '</option>';
                    }
                echo '</select><br />';   
                   
                echo 'Indhold: <br /><textarea class="nyheder" name="post_content" width="500px"/></textarea><br /><br />
                    <input type="submit" value="Opret nyhed" />
                </form>';
            }

Her sætter jeg det ind:

$sql = "INSERT INTO
                            nyheder_posts(post_content,
                                  post_date,
                                  post_topic,
                                  post_by)
                        VALUES
                            ('" . mysql_real_escape_string($_POST['post_content']) . "',
                                  NOW(),
                                  " . $topicid . ",
                                  " . $_SESSION['user_id'] . "
                            )";

Her udtrækker jeg det:




            //udtrækker værdierne fra databasen
            $posts_sql = "SELECT
                        nyheder_posts.post_topic,
                        nyheder_posts.post_content,
                        nyheder_posts.post_date,
                        nyheder_posts.post_by,
                        users.user_id,
                        users.user_name
                    FROM
                        nyheder_posts
                    LEFT JOIN
                        users
                    ON
                        nyheder_posts.post_by = users.user_id
                    WHERE
                        nyheder_posts.post_topic = " . mysql_real_escape_string($_GET['id']) . "
                    LIMIT
                    $start, $per_page";
                       

og viser det:

while($posts_row = mysql_fetch_assoc($posts_result))
                {
               
                    echo 'Af <a class="links" href="http://www.sxxx.dk/user_profiles.php?user_id= ' . $posts_row['user_id'] . '"> ' . $posts_row['user_name'] . '</a> den <i>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</i><br/>
                    <br /><p class="tekst">
                            ' . htmlentities(stripslashes($posts_row['post_content'])) . '
                                </p><hr width="500px" size="0.5px" align="center" noshade color="silver"/>
                                ';
                }
Avatar billede olsensweb.dk Ekspert
31. august 2011 - 17:34 #15
utested men ca sådan her

Her sætter jeg det ind:
$txt = $_POST['post_content'];
$txt = BBCode($txt);

$sql = "INSERT INTO nyheder_posts(post_content, post_date,post_topic,post_by)
VALUES ('" . mysql_real_escape_string($txt) . "',  NOW(),  " . $topicid . ", " . $_SESSION['user_id'] . "  )";



og viser det:
while($posts_row = mysql_fetch_assoc($posts_result))
{
    $post_content = smiley($posts_row['post_content']);         
    echo 'Af <a class="links" href="http://www.sxxx.dk/ (...) ' . $posts_row['user_id'] . '"> ' . $posts_row['user_name'] . '</a> den <i>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</i><br/>
    <br /><p class="tekst">
    ' . htmlentities(stripslashes($post_content)) . '
    </p><hr width="500px" size="0.5px" align="center" noshade color="silver"/>
    ';
}


functionerne BBCode og smiley har du i #10
Avatar billede Jakie Juniormester
31. august 2011 - 17:54 #16
Hmm.. Problemet er at det samme opstår - den bliver ved med kun at vise koderne :)

Fx viser den bare: <img src='gladsmiley-gif' alt=''>
Avatar billede olsensweb.dk Ekspert
31. august 2011 - 18:51 #17
står der det rigtige i DB ??
ellers kunne det værer mysql_real_escape_string der lavede problemer

hvis der står det rigtige i DB ville jeg prøve at fjerne htmlentities i din output sætning
stripslashes kan du også prøve at fjerne fra output sætningen og fra smiley()
Avatar billede Jakie Juniormester
01. september 2011 - 11:11 #18
Det virkede :)

Bare lige et spørgsmål - gør det sikkerheden dårligere?
Avatar billede Jakie Juniormester
01. september 2011 - 12:21 #19
Og du må gerne vedlægge svar :)
Avatar billede Jakie Juniormester
01. september 2011 - 12:34 #20
Vil også lige gerne takke igen for den super hjælp! :)
Avatar billede olsensweb.dk Ekspert
01. september 2011 - 20:11 #21
>gør det sikkerheden dårligere?
ja det at du fjerner mysql_real_escape_string øger risikoen for sql injection, så hvis det var den der volgte problemet, skal du sikre dig på anden måde.
en ide kune værer at kigge på
mysqli http://dk.php.net/mysqli
mysqli::prepare http://php.net/manual/en/mysqli.prepare.php
http://webdeveloper.com/forum/showthread.php?p=1083086

ellers kunne du lege med
http://dk.php.net/manual/en/function.addslashes.php når du ligger det i db
og
http://dk.php.net/manual/en/function.stripslashes.php når du udlæser fra db


hvis det var htmlentities der volgte problemet, så påvirker dette ikke sikkerheden at fjerne den

>Vil også lige gerne takke igen for den super hjælp! :)
selv tak
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

IT-JOB