在显示MySQL数据库中的内容时显示不必要的HTML

时间:2010-06-12 15:46:39

标签: mysql html

我的主页从我的MySQL数据库中提取内容以创建博客。我已经知道它只显示帖子的摘录。出于某种原因,它也会显示HTML标签,而不是使用标签对其进行格式化(参见下图)。 任何帮助表示赞赏。

主页:

<html>
    <head>
        <title>Ultan Casey | Homepage</title>
        <link rel="stylesheet" href="css/style.css" type="text/css" />
    </head>
    <body>
         <div class="wrapper">
             <div id="upperbar">
             <a href="#">Home</a>
             <a href="#">About Me</a>
             <a href="#">Contact Me</a>
             <a href="http://www.twitter.com/UltanKC">Twitter</a>
         <form id="search-form" action="/search" method="get">
             <input type="text" id="textarea" size="33" name="q" value=""/>
             <input type="submit" id="submit" value="Search"/>
         </form>
             </div>
             <div id="banner">
             <img src="images/banner.jpg">
             </div>
             <div class="sidebar"></div>
             <div class="posts">
             <?php
             mysql_connect ('localhost', 'root', 'root') ;
             mysql_select_db ('tmlblog');

             $sql = "SELECT * FROM php_blog ORDER BY timestamp DESC LIMIT 5";

             $result = mysql_query($sql) or print ("Can't select entries from table php_blog.<br />" . $sql . "<br />" . mysql_error());

             while($row = mysql_fetch_array($result)) {

                 $date = date("l F d Y", $row['timestamp']);

                 $title = stripslashes($row['title']);
                 $entry = stripslashes($row['entry']);
                 $id = $row['id'];

                 ?>
                  <?php echo "<p id='title'><strong><a href=\"post.php?id=". $id . "\">" . $title . "</a></strong></p>"; ?><br />

                        <div class="post-thumb"><img src="thumbs/<?php echo $id ?>.png"></div>
                        <?php echo htmlspecialchars(substr($entry, 0, 1050)) ?>...   
                        <br>          

                        <hr><br />
                        Posted on <?php echo $date; ?>
                        </p>
                        </div>

                                    </div>


                            </p 


                            <?php
                        }
                        ?>
                       </div> 
             </div>

         </div>
    </body>
</html>

图像: alt text http://i49.tinypic.com/ms27if.png

2 个答案:

答案 0 :(得分:1)

您正在通过htmlspecialchars传递您的帖子,该帖子编码&lt; as&amp; lt;和&gt; as&amp; gt;等等。这意味着它们显示为&lt;和&gt;而不是被解析为html标签。

htmlspecialchars的重点是生成HTML中不变的文本...以使其按原样显示。

更好的方法是不要存储&lt; br /&gt; (或任何其他HTML)在您的帖子中。相反,请使用常规换行符,并将nl2br(htmlspecialchars($text))回显到您的页面中。

如果你绝对需要允许html,你可能会考虑像HTML Purifier这样的东西来处理逃避讨厌的东西,在这种情况下你会跳过htmlspecialchars调用。请注意:在显示用户提供的HTML时,编写自己的过滤器来阻止恶意代码并不是一个好主意。

答案 1 :(得分:0)

echo substr($ entry,0,1050)