嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-03-24 3511 次浏览 标签 : ZzBlog

今天在写代码的时候发现的,在textarea里面添加\r\n,再打开的时候就是空白了,我进入数据库查看,已经直接变成了换行了。这是为什么呢?太久不写原生的sql这种初级问题都不知道了,原因是就是没有给输入的内容添加转义,我之前以为htmlspecialchars能完全替代addslashes呢。实则不然。

做了如下测试:
error_reporting(E_ALL);
set_time_limit(0);
$db = mysql_connect('localhost','root','123456') or die("Database error"); 
mysql_select_db('zhoumengkang', $db); 
$result = mysql_query("set names 'utf8'"); 
$content = '\r\n22222';
$query = 'insert into `z_blog`(`title`,`content`)values(111,"'.$content.'")';
$query = "insert into `z_blog`(`title`,`content`)values(111,'{$content}')"; 
//var_dump($query);
$result = mysql_query($query); 

发现上面两种字符串格式都会把\r\n保存为回车

如果在把内容转义下,$content = addslashes('\r\n22222'); 就OK了。此时的$content\\r\\n22222 存入数据库的时候反而又自动转回来了,变为了\r\n22222

看手册上大家都说最好是使用

http://www.php.net/manual/en/function.mysql-real-escape-string.php

http://www.php.net/manual/en/mysqli.real-escape-string.php 

来替代addslashes 我试了下,效果一样,但是官方说到mysql_real_escape_string在5.5已经不建议使用,在后面而且将会直接去掉。所以我暂时还是直接使用的addslashes

顺便复习下stripslashesaddslashes

magic_quotes_gpc = On时,使用了addslashes()处理后的数据中需要转义的数据(xx,例如\r,\n等)在数据库中将以\xx形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\,因此stripslashes()出场了,它能把\去掉(区别于str_replace("\", "",$Str))。

magic_quotes_gpc = Off时,使用了addslashes()处理后的数据中需要转义的数据(xx)在数据库中将以xx形式直接保存,没有上面说的有\addslashes()起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()

addslashes()stripslashes()正好是相反的。

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表