我的主页从我的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>
答案 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)