php与mysql数据交互单引号(')转码问题

最开始向数据库中插入博客信息的代码:
$sql="INSERT INTO blogs (title,content,type,time,id)
VALUES
('$_POST[title]','$_POST[content]','$[type]','$_POST[time]','$_POST[id]')";

 即直接将前端通过post传来的参数存入数据库中。后来测试发现一个问题就是当content也就是博客内容中含单引号时,无法实现博客的上传。应该是单引号会将sql语句重新分割,导致sql语句错误,就无法正常上传博客了。使用php的 htmlspecialchars 方法,将特殊字符转换为 HTML 实体。

php与mysql数据交互单引号(')转码问题

 

 

 php与mysql数据交互单引号(')转码问题

 

 

 

使用ENT_QUOTES参数就可以实现将博客中的单引号转化为 ',就能够正常将博客存入数据库了。

$content = htmlspecialchars($_POST['contetn'],ENT_QUOTES);
$sql="INSERT INTO blogs (title,content,type,time,id)
VALUES
('$_POST[title]','$_POST[content]','$content','$_POST[time]','$_POST[id]')";
$con->query( $sql );

 当我们需要获取博客时,取出的博客内容时被转化过的格式,例如单引号就是 &#039; ,<就是&lt……

   要想在前端页面正常显示博客内容,就必须将特殊符号转换回来,这里就要使用与 htmlspecialchars 相对的函数 htmlspecialchars_decode函数了。

php与mysql数据交互单引号(')转码问题

 

 

 php与mysql数据交互单引号(')转码问题

 

 

 并且要将参数设置为ENT_QUOTES,因为需要将单引号从&#039;转换回来,而默认是不会转换单引号的。

部分代码如下:

$arr = array();
// 将每行的博客的内容均转码
while ( $row = $result->fetch_assoc() ) {
    $row['content'] = htmlspecialchars_decode($row['content'],ENT_QUOTES);
    array_push( $arr, $row );
}
上一篇:实例039 IP地址形式输出


下一篇:初识恶意代码之------网络蠕虫