设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 629|回复: 0
打印 上一主题 下一主题

PHP5环境下用了fckeditor,保存数据时单引号,双引号都会被替换的解决方法 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2011-5-18 13:40:00 |只看该作者 |倒序浏览
    ckeditor其他文字排版都搞好,保存数据时会反斜杠或是被替换成转义字符,找了好久都没有找好到的方法;
    程序没有任何问题,数据也能保存,就是这个编辑不行,


    在百度和google找了一上午,没有找到,下午的时候才找到原因:

    原因是PHP备置问题;

    get_magic_quotes_gpc 设置问题

    服务器的 magic_quotes_gpc 是不是设置为了On

    如果是这样,那么 单双引号反斜线与NULL字符 都会被自动转义,也就是前面加一个反斜线

    对于这样的数据可以直接存入数据库,在读取的时候 stripslashes 一下即可


    按照此方法我已经解决了问题,但是回到来看我本地备置时,本地的没有改也是正常的!!

    具体原因我还是不太明白!!


    随便帖:

    PHP 中 magic_quotes_gpc 和 magic_quotes_runtime 的区别,作用和用法
    魔术引用发生作用是在传递$_GET,$_POST,$_COOKIE时

    1.条件: magic_quotes_gpc=off
    写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。

    数据:  $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).

    操作: 将字符串:”snow”’’sun” 写入数据库,

    结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。

    数据库保存格式:无数据。

    输出数据格式:无数据。

    说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。

    2.条件: magic_quotes_gpc=off
    写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。

    数据:  $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).

    操作: 将字符串:”snow”’’sun” 写入数据库,

    结果: sql语句顺利执行,数据成功写入数据库

    数据库保存格式:snow”’’sun (和输入一样)

    输出数据格式:snow”’’sun (和输入一样)

    说明: addslashes()函数将单引号转换为\’的转义字符使sql语句成功执行,
    但\’并未作为数据存入数据库,数据库保存的是snow”’’sun 而并不是我们想象的snow\’\’\’\’sun

    3.条件: magic_quotes_gpc=on
    写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。

    数据:  $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).

    操作: 将字符串:”snow”’’sun” 写入数据库,

    结果: sql语句顺利执行,数据成功写入数据库

    数据库保存格式:snow”’’sun (和输入一样)

    输出数据格式:snow”’’sun (和输入一样)

    说明: magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行,
    但\’并未作为数据入数据库,数据库保存的是snow”’’sun而并不是我们想象的snow\’\’\’\’sun。

    4.条件: magic_quotes_gpc=on
    写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。

    数据:  $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).

    操作: 将字符串:”snow”’’sun” 写入数据库,

    结果: sql语句顺利执行,数据成功写入数据库

    数据库保存格式:snow\’\’\’\’sun (添加了转义字符)

    输出数据格式:snow\’\’\’\’sun (添加了转义字符)

    说明: magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行,
    addslashes又将即将写入数据库的单引号转换为\’,后者的转换被作为数据写入
    数据库,数据库保存的是snow\’\’\’\’sun

    总结如下:
    1. 对于magic_quotes_gpc=on的情况,

    我们可以不对输入和输出数据库的字符串数据作
    addslashes()和stripslashes()的操作,数据也会正常显示。

    如果此时你对输入的数据作了addslashes()处理,
    那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。

    2. 对于magic_quotes_gpc=off 的情况

    必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
    因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

    补充:

    magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
    magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据

    ============ magic_quotes_gpc和magic_quotes_runtime的区别和用法 =============

    PHP 提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini 设置为ON的时候,就会为我们引用的数据碰到单引号’和双引号”以及反斜线 \ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明:

    magic_quotes_gpc
    作用范围是:WEB客户服务端;
    作用时间:请求开始是,例如当脚本运行时.

    magic_quotes_runtime
    作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
    作用时间:每次当脚本访问运行状态中产生的数据.

    所以

    magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
    magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

    例子说明:
    复制内容到剪贴板
    代码:


    <form action="" method="post" >
    STR:<input type="text" name="str">
    <input type="submit">
    </form>




    <?php

    echo '现在通过POST传递过来的值是:' ,$_POST['str'], '<br />';

    if (get_magic_quotes_gpc()) {      // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
          $str = $_POST['str'];
    } else {
          $str = addslashes($_POST['str']);
    }

    echo '这里是转义过后的:' ,$str, '<hr />';
    $sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";

    //============================================================================
    //-----magic_quotes_gpc只会转义:     通过Get/Post/Cookies获得的数据
    //-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
    //============================================================================
    $data = implode(file('try.php'));      // 我们在里面依然写'"\这几个字符,用来测试
    echo '这里是try.php的数据,';
    if (get_magic_quotes_runtime()) {
          $data = $data;
          echo '被系统自带转义的' .$data;
    } else {
          echo '被addslashes转义了的' .$data = addslashes($data);
    }

    $sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";
    echo '<br />SQL语句为:<br />' ,$sql;
    //---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠
    //---stripslashes()和addslashes()作用相反
    ?>



    最关键的区别是就是上面提到的2点:他们针对的处理对象不同
    magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
    magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

    在这里顺便在提几个想关联的函数:

    set_magic_quotes_runtime():
    设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtime

    get_magic_quotes_gpc():
    查看magic_quotes_gpc值.0=关闭.1=打开.

    get_magic_quotes_runtime():
    查看magic_quotes_runtime值。0=关闭.1=打开.

    注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-2 01:24 , Processed in 0.102485 second(s), 26 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部