[英]Saving and Displaying HTML and special characters in a mysql database safely?
标题基本上是总结。 我建立了一个小博客,但我什至不能在我的文章中发布链接! 我能做什么? 我已经尝试了htmlentities()
, htmlspecialchars()
, real_escape_string()
,基本上每种形式的转义都存在。 我正在将PHP 5.3与MySQL 5.1一起使用
这是将博客保存到数据库的代码:
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlentities($data);
if ($problem && strlen($data) == 0)
{
die($problem);
}
return $data;
}
if(isset($_POST['addBlog'])) { //form submitted?
// get form values, escape them and apply the check_input function
$title = $link->real_escape_string($_POST['title']);
$category = $link->real_escape_string(check_input($_POST['category'], "You must choose a category."));
$content = $link->real_escape_string(check_input($_POST['blogContent'], "You can't publish a blog with no blog... dumbass."));
$date = $link->real_escape_string(check_input($_POST['pub_date'], "What day is it foo?"));
// our sql query
$sql = $link->prepare("INSERT INTO pub_blogs (title, date, category, content) VALUES (?, ?, ?, ?)");
$sql->bind_param('ssss', $title, $date, $category, $content);
//save the blog
#mysqli_query($link, $sql) or die("Error in Query: " . mysqli_error($link));
$sql->execute();
if (!$sql)
{
print "<p> Your Blog Was NOT Saved. </p>";
}
}
这是我显示博客的代码:
// Grab the data from our people table
$result = mysqli_query($link, "SELECT * FROM pub_blogs ORDER BY date DESC") or die ("Could not access DB: " . mysqli_error($link));
while ($row = mysqli_fetch_assoc($result))
{
$id = $link->real_escape_string($row['id']);
$title = $link->real_escape_string($row['title']);
$date = $link->real_escape_string($row['date']);
$category = $link->real_escape_string($row['category']);
$content = $link->real_escape_string($row['content']);
$id = stripslashes($id);
$title = stripslashes($title);
$date = stripslashes($date);
$category = stripslashes($category);
$content = stripslashes($content);
echo "<div class='blog_entry_container'>";
echo "<span class='entry_date'><a href='#'>" .$date. "</a> - </span><span class='blog_title'><a class='blogTitleLink' href='blog-view.php?id=" .$id. "'>" .$title. "</a></span>";
echo "<p>" .$content. "</p>";
echo "</div>";
}
虽然编码字符是一件好事,但必须确保不要过度编码。
仅对当时需要的内容进行编码。 在将HTML放入数据库之前,请勿对HTML进行编码。 您可能需要稍后打印出来,或者可能要对其进行搜索。 对SQL使用正确的转义序列(或者最好使用PDO
)。
仅当将内容发送到浏览器时,才应转义HTML,然后需要确定需要哪种转义。 要将<
和&
类的东西转换为字符实体,以便它们正确显示,然后使用正确的转义方法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.