包含html标签的帖子显示为未格式化

时间:2011-09-21 14:30:36

标签: php mysql rte

我正在编写一个简单的类似cms的解决方案来跟踪我的愚蠢想法。 一切都很顺利,但我现在在将Xinha RTE插件应用到我的应用程序中时遇到了一些困难。

我已经按照他们的现场教程,它似乎正在工作但是......

在对文本,标题段落等进行格式化时,尽管标记在mysql数据库中正确保存:

<h1>heading</h1>
<p>text example</p>

它们显示为:

<h1>heading</h1><p>text example</p>  (concatenated and NOT formatted , displaying tags in stead)

&lt;p&gt;tesy&lt;/p&gt; &lt;h4&gt;fgfg&lt;br /&gt;&lt;/h4&gt; &lt;h2&gt; &lt;/h2&gt;

最后一个示例输出是因为我做了这个改变:

//$postCon = mysql_real_escape_string($postCon);
$postCon = htmlspecialchars($postCon);

这只是因为有人在他们的论坛上说,为了逃避html特殊字符会“愚蠢” - 因为html标签是由它们组成的。

我很难指定实际问题。因此我的问题有点草率。我希望我现在所处的地方能够提供一些正确的解释或指导。

我现在要去喝咖啡并思考这个问题,如果我有新的东西,我会带来更新。 现在我将给你留下实际处理邮件的脚本。

感谢,

<?php  

include_once 'bin/configDb.php';
include_once 'bin/connectDb.php';  
include_once 'header.php';
//get stuff from post


$topicSub = $_POST['topic_subject'];
//$topicSub = mysql_real_escape_string($topicSub);
$topicSub = htmlspecialchars($topicSub);
$topicCat = $_POST['topicCat'];
//  $topicCat = mysql_real_escape_string($topicCat);

$sesId = $_GET['username'];

        //the form has been posted, so save it  
        //insert the topic into the topics table first, then we'll save the post into    the posts table

$postCon = $_POST['post_content'];
//$postCon = mysql_real_escape_string($postCon);
$postCon = htmlspecialchars($postCon);


$sql = "INSERT INTO
                    topics(topic_subject, topic_date, topic_cat, topic_by)
    VALUES('$topicSub', NOW(), '$topicCat', '$sesId' )";

        $result = mysql_query($sql);

        if(!$result) 
        { 
            //something went wrong, display the error 
            echo 'An error occured while inserting your data. Please try again later.'    . mysql_error(); 
            $sql = "ROLLBACK;"; 
            $result = mysql_query($sql); 
        } 
        else 
        { 
            //the first query worked, now start the second, posts query 
            //retrieve the id of the freshly created topic for usage in the posts query

            $topicId = mysql_insert_id();

            $sql = "INSERT INTO 
                        posts(post_content, 
                             post_date,
                              post_topic, 
                              post_by) 
                    VALUES 
                        ('$postCon', NOW(), '$topicId', '$sesId' )";
            $result = mysql_query($sql); 

            if(!$result) 
            { 
                //something went wrong, display the error 
                  echo 'An error occured while inserting your post. Please try again    later.' . mysql_error(); 
                $sql = "ROLLBACK;"; 
                $result = mysql_query($sql); 
            } 
            else 
            { 
                $sql = "COMMIT;"; 
                $result = mysql_query($sql); 

                //after a lot of work, the query succeeded! 
                echo 'You have successfully created <a href="topic.php?id='. $topicid . '">your new topic</a>.';
                header("location:admin.php");

            } 


        }
        include_once 'footer.php';
?>

2 个答案:

答案 0 :(得分:0)

你错过了mysql_real_escape_string的目的。它可以在SQL查询中使用任意字符串数据 SAFE 。这是一种SQL注入攻击防范方法。 htmlspecialchars根本不会帮助防止SQL注入攻击。你正用一把螺丝刀钉在钉子上。它可能在某些情况下有效,但不会涵盖所有情况。而那些“未被发现”的案件将允许某人通过前门跳进来攻击你的网站。

答案 1 :(得分:0)

我发现问题出在代码的完全不同的区域。它是在代码中显示内容,愚蠢的我。那是个     ヶ辆(stripslashes()函数)

做有趣的事情。

谢谢你让我把它放在那里。

Marc B,再次感谢我处理我的sql注入问题。随意按照我的方式提出更多建议。 我确实将你的最后建议付诸实践:)个人感谢你