今天做了一个小项目,给别人之后发现post数据被自动转义了,我郁闷了半天,我google了一下发现是PHP魔术引号在作怪。。。我煞费苦心终于找到了原因,可是怎么解决呢?百度。。。google。。。其实都挺好的
在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。 PHP中有三个设置可以实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转。 PHP称之为魔术引号,这三项设置分别是 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。
magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。
magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。
我表单内容本来是:<img alt=”” width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” />
<img alt=\”\” width=\”400\” height=\”300\” src=\”/Upfiles/201105/images/1306657040.jpg\” />
对策一:修改php.ini文件(修改php.ini这个方法就不说了,大家可以google下)
对策二:把转义的给取消了
第一步:找到你提交的数据比如$_POST[‘content’],将其改成$content=stripslashes($_POST[‘content’]);
第二步:以后在使用$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()过滤一下。
PS:遇到问题,不要慌乱,要弄清问题原因,然后百度或者google下,就是找不到解决办法去论坛发帖求助的时候也知道是出了什么原因,这样高手看到也能一目了然。有人发求助帖总是喜欢用“高手请进”、“十万火急”等等词语作为标题。(一家之言,高手见笑了。呵呵)