在处理mysql和GET、POST的数据时,经常要对数据的引号进行转义操做。
PHP中有三个设置能够实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转。
PHP称之为魔术引号,这三项设置分别是
magic_quotes_gpc
影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。php
这个开启时,经过GET,POST,COOKIE传递的数据会自动被转义。mysql
如 test.php?id=abc'de"f
echo $_GET['id']; # 会获得 abc\'de\"f
magic_quotes_gpc=On; 这个开启了,对写入数据库是没有影响的,好比 上面的$_GET['id'] 写到数据库里面,依然是 abc'de"f ,
相反,若是magic_quotes_gpc=Off; 那么字符中要带有引号(无论单引号仍是双引号) ,直接写入mysql都会直接变成空白
可是,若是你将它写入文档,而非mysql。那么它将是 abc\'de\"f sql
magic_quotes_runtime
若是打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。数据库
magic_quotes_sybase
若是打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会彻底覆盖 magic_quotes_gpc。若是同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。函数
我表单内容原本是:<img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” />google
<img alt=\”\” width=\”400\” height=\”300\” src=\”/Upfiles/201105/images/1306657040.jpg\” />ip
对策一:修改php.ini文件(修改php.ini这个方法就不说了,你们能够google下)文档
对策二:把转义的给取消了字符串
第一步:找到你提交的数据好比$_POST['content'],将其改为$content=stripslashes($_POST['content']);get
第二步:之后在使用$POST['content']的地方都换成$content
第三步:提交到数据库,数据库储存仍是正常的:<img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” />读出来又成了
<img alt=\”\” width=\”400\” height=\”300\” src=\”/Upfiles/201105/images/1306657040.jpg\” />(这个应该知道怎么解决了吧?要不我再罗嗦下吧)
第四步:将数据库读取的内容再用stripslashes()过滤一下。
stripslashes() 这个函数 ,删除由addslashes()函数添加的反斜杠。用于清理从数据库或 HTML 表单中取回的数据
(
PHP页面中若是不但愿出现如下状况:
单引号被转义为 \'
双引号被转义为 \"
那么能够进行以下设置以防止:
在php.ini中设置:magic_quotes_gpc = Off)
总结以下:
1. 对于magic_quotes_gpc=on的状况,
咱们能够不对输入和输出数据库的字符串数据做
addslashes()和stripslashes()的操做,数据也会正常显示。
若是此时你对输入的数据做了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的状况
必须使用addslashes()对输入数据进行处理,但并不须要使用stripslashes()格式化输出 由于addslashes()并未将反斜杠一块儿写入数据库,只是帮助mysql完成了sql语句的执行。