今天在写代码的时候发现的,在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
顺便复习下stripslashes
和addslashes
当magic_quotes_gpc = On
时,使用了addslashes()
处理后的数据中需要转义的数据(xx
,例如\r
,\n
等)在数据库中将以\xx
形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\
,因此stripslashes()
出场了,它能把\
去掉(区别于str_replace("\", "",$Str)
)。
当magic_quotes_gpc = Off
时,使用了addslashes()
处理后的数据中需要转义的数据(xx
)在数据库中将以xx
形式直接保存,没有上面说的有\
,addslashes()
起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()
。
addslashes()
和stripslashes()
正好是相反的。