小弟用CKEDITOR生成了一些纯html代码<p style="text-align: center; ">
1.&quot;我&quot;</p>
<p>
<strong><em><u>2.&quot;爱&quot;</u></em></strong></p>
<p>
<span style="color:#ff0000;"><strike><u><em><strong><span style="font-size:20px;"><span style="font-family:trebuchet ms,helvetica,sans-serif;"><span style="background-color:#dda0dd;">3.&quot;你&quot;</span></span></span></strong></em></u></strike></span></p>
并成功赋值给了一个变量zt_text,这个变量是javascript的,不是php的哦!我想用ajax把zt_text给传到后台可是我只能得到 <p style=因为后面有一个双引号有没有什么办法可以不用替换任何字符把html代码原模原样给保存到mysql里呢?保存好了后又怎么样用php给取出来,显示在页面上呢?

解决方案 »

  1.   


    是这个
    xmlHttp.open("get",url,false)应该说是get的吧.后台php这样接收的
    $ZT_Text=isset($_REQUEST['ZT_Text']) ? $_REQUEST['ZT_Text']:'';
      

  2.   

    改为post方式试试。
    xmlHttp.open('get',url,false)
      

  3.   


    是强了一点,不过
    我也还是只得到了一点点代码<p style="text-align: center; ">1.后面的这些
    &quot;我&quot;</p>
    <p>
    <strong><em><u>2.&quot;爱&quot;</u></em></strong></p>
    <p>
    <span style="color:#ff0000;"><strike><u><em><strong><span style="font-size:20px;"><span style="font-family:trebuchet ms,helvetica,sans-serif;"><span style="background-color:#dda0dd;">3.&quot;你&quot;</span></span></span></strong></em></u></strike></span></p>
    就都没上传到哦.
      

  4.   

    是不是保存到数据库的时候没进行转义啊。后台页面获取到表单数据后echo strlen($ZT_Text);看看字符串长度。
    INSERT的时候使用mysql_escape_string()函数转义一下。
      

  5.   

    长度应该是没问题的只是值压根就没完整的传给后台只传了一部分碰到 &quot; 这个就没了.
      

  6.   

    POST提交前,输出JS获取数据的长度,也许在提交前就没有获取到正确的数据。
      

  7.   

    var url="HouTai.php"+"?ZT_Text="+ZT_Text;我用alert(url);查看了提交的连接是正确的确实有<p style="text-align: center; ">
    1.&quot;我&quot;</p>
    <p>
    <strong><em><u>2.&quot;爱&quot;</u></em></strong></p>
    <p>
    <span style="color:#ff0000;"><strike><u><em><strong><span style="font-size:20px;"><span style="font-family:trebuchet ms,helvetica,sans-serif;"><span style="background-color:#dda0dd;">3.&quot;你&quot;</span></span></span></strong></em></u></strike></span></p>
    这一连串的完整代码跟在后面这说明了在提交前是没问题的只是php在接收的时候从第一个 &quot; 出现的地方给截断了我把 &quot; 替换成 <双引号>双可以多传那么一点点内容到mysql但遇到 # 的时候又不行了,所以我想应该是可以有办法把完整代码给保存到mysql的只是现在后台接值有问题
      

  8.   

    大哥,你把获取的字符串附到url上的,这样尽管使用POST方法提交的,但其实数据还是通过url传递的,也就是通过get方法提交了。
      

  9.   

    在AJAX中使用POST方法
      

  10.   

    我的代码加上
    //http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    //http.setRequestHeader("Content-length",params.length);
    //http.setRequestHeader("Connection","close");都运行不了不把字符串附到url上
    又如何把字符串传给后台呢?
      

  11.   

    我的情况和这个人的差不多吧
    http://bbs.chinaunix.net/thread-907021-1-1.html但是我看不懂他的
    query_string
    $get1=explode('&',$_SERVER["QUERY_STRING"]);
    reset($get1);
    while(list($key,$value)=each($get1))
            {
            $get2=explode('=',$value);
            $get[$get2[0]]=$get2[1];
            }
    debug($get);
      

  12.   

    他是通过url传。你用post传试过了吗?
    xmlHttp.open('post',url,true)
    xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlHttp.send(zt_text);  //zt_text=你的html代码。php端:
    $zt_text=$_PSOT['zt_text'];这样都试过了吗?
      

  13.   

    还是不行这应该是编码的问题吧php的编码方式自动把一些特殊字符和特殊字符后的内容给去掉了
      

  14.   

    把你的js代码贴出来,你的js传值的时候没有传完整!
      

  15.   

    我的代码是这样的
    function SendMsg(c1,c2){ //发送函数
    var xmlHttp;
      try
      {
      // Firefox, Opera 8.0+, Safari
      xmlHttp=new XMLHttpRequest();
      }
      catch (e)
      {
      // Internet Explorer
      try
      {
       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
       try
       {
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
      alert("您的浏览器不支持AJAX!");
      return false;
      }
       }
       }
    //---------------------------------------------------------------------------
    var url="HouTai.php"+"?go1="+c1;
    url=url+
    "&MB_Id="+MB_Id+
    "&MK_Id="+MK_Id+
    "&ZT_Id="+ZT_Id+
    "&ZT_Type="+ZT_Type+
    "&ZT_Page="+ZT_Page+
    "&ZT_PaiXu="+ZT_PaiXu+
    "&ZT_Title="+ZT_Title+
    "&TZ_Page="+TZ_Page+
    "&User_Name="+User_Name+
    "&User_MiMa="+User_MiMa+
    "&User_Id="+User_Id+
    "&DengLu_Type="+DengLu_Type+
    "&DiZhi="+DiZhi+
    "&TZ_Id="+TZ_Id+
    "&TZ_Text="+TZ_Text+
    "&ZT_Text="+ZT_Text;
    //alert(url);
    //if(c1=="把主题内容写入数据库"){alert(ZT_Text);}
    //url=url+"&sid="+Math.random()
    Td_Id=c2;
    //xmlHttp.open("post",url,false)

    xmlHttp.open("post",url,false);
    xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange=function()
    //---------------------------------------------------------------------------
      {
    //alert("["+xmlHttp.responseText+"]")
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    {//页面完成
    switch (tBack_Num)
    {//判断回调函数要执行怎么样的操作
    case 0://正常的在指定的Id_Td区域显示出xmlHttp.responseText
    document.getElementById(Td_Id).innerHTML=xmlHttp.responseText;
    break;//正常的在指定的Id_Td区域显示出xmlHttp.responseText
    case 1: //用户登录时的判断
    //alert("["+xmlHttp.responseText+"]")
    tBack_Num=0;
    switch (xmlHttp.responseText){
    case "用户名不存在":
    alert("用户名不存在!");
    document.all('IUserName').focus();
    break;//退出函数
    case "密码错误":
    alert("密码错误!");
    document.all('IUserMiMa').focus();
    break;//退出函数]
    case "密码正确":
    //alert("密码正确!")
    tBack_Num=2;
    SendMsg("传用户的Id给User_Id","Td_DengLu");
    break;//退出函数
    }
    break;//用户登录时的判断
    case 2://接收成功登录的用户的Id.///
    User_Id=xmlHttp.responseText
    //alert("["+User_Id+"]")
    tBack_Num=0
    DengLu_Type=1
    SendMsg("加载登录模块","Td_DengLu")
    break;//接收成功登录的用户的Id.
    case 3: //接收主题Id
    //alert("发表成功")
    tBack_Num=0;//正常的显示返回的内容.
    ZT_Id=xmlHttp.responseText;
    //alert("["+xmlHttp.responseText+"]")
    tDo("加载帖子列表");
    break;////接收主题Id
    case 4:
    //alert("["+xmlHttp.responseText+"]")
    //成功把数据写入数据库后,把提交的帖子的Id传回来.
    document.all('I_TZText').value=""//帖子已经成功提交并写入了数据库,输入框中的内容已经不再需要了.清空
    tBack_Num=0
    TZ_Id=xmlHttp.responseText
    SendMsg("加载刚提交的回复","Td_ShowFBTZ2");//加载刚提交的回复
    }//判断回调函数要执行怎么样的操作  
    } //页面完成
     }
    //---------------------------------------------------------------------------
      xmlHttp.send(null);
    }//发送函数
    而我用下面这个页面又可以得到差不多的效果
    只是在双引号前面多了一个 \
    <?
    header("Content-type: text/html;charset=GBK");
    $tbutton=isset($_REQUEST['button1']) ? $_REQUEST['button1']:'';
    $ttext=isset($_REQUEST['text1']) ? $_REQUEST['text1']:'';
    echo $tbutton;
    echo $ttext;
    ?><form action="kankan.php" method="get">
    <input type="submit" name="button1" type="button" value="我爱你" /><textarea name="text1" cols="50" rows="30">
    <p style="text-align: center; ">
    1.&quot;我&quot;</p>
    <p>
    <strong><em><u>2.&quot;爱&quot;</u></em></strong></p>
    <p>
    <span style="color:#ff0000;"><strike><u><em><strong><span style="font-size:20px;"><span style="font-family:trebuchet ms,helvetica,sans-serif;"><span style="background-color:#dda0dd;">3.&quot;你&quot;</span></span></span></strong></em></u></strike></span></p></textarea>
    </form>
    <p style="text-align: center; ">
    1.&quot;我&quot;</p>
    <p>
    <strong><em><u>2.&quot;爱&quot;</u></em></strong></p>
    <p>
    <span style="color:#ff0000;"><strike><u><em><strong><span style="font-size:20px;"><span style="font-family:trebuchet ms,helvetica,sans-serif;"><span style="background-color:#dda0dd;">3.&quot;你&quot;</span></span></span></strong></em></u></strike></span></p>
      

  16.   

    继 续 关 注 ing ......
      

  17.   

    我又发现了一个问题也许这个问题才是真正正的问题所在就是AJAX值的回传后台的php是接收到完整的内容了的只是ajax的显示后台处理好的内容时没有按原样给显示出来也就是这里出了问题吧xmlHttp.onreadystatechange=function()
    //---------------------------------------------------------------------------
      {
    //alert("["+xmlHttp.responseText+"]")
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    {//页面完成
    switch (tBack_Num)
    {//判断回调函数要执行怎么样的操作
    case 0://正常的在指定的Id_Td区域显示出xmlHttp.responseText
    document.getElementById(Td_Id).innerHTML=xmlHttp.responseText;
    break;//正常的在指定的Id_Td区域显示出xmlHttp.responseText
    case 1: //用户登录时的判断
    //alert("["+xmlHttp.responseText+"]")
    tBack_Num=0;
    switch (xmlHttp.responseText){
    case "用户名不存在":
    alert("用户名不存在!");
    document.all('IUserName').focus();
    break;//退出函数
    case "密码错误":
    alert("密码错误!");
    document.all('IUserMiMa').focus();
    break;//退出函数]
    case "密码正确":
    //alert("密码正确!")
    tBack_Num=2;
    SendMsg("传用户的Id给User_Id","Td_DengLu");
    break;//退出函数
    }
    break;//用户登录时的判断
    case 2://接收成功登录的用户的Id.///
    User_Id=xmlHttp.responseText
    //alert("["+User_Id+"]")
    tBack_Num=0
    DengLu_Type=1
    SendMsg("加载登录模块","Td_DengLu")
    break;//接收成功登录的用户的Id.
    case 3: //接收主题Id
    //alert("发表成功")
    tBack_Num=0;//正常的显示返回的内容.
    ZT_Id=xmlHttp.responseText;
    //alert("["+xmlHttp.responseText+"]")
    tDo("加载帖子列表");
    break;////接收主题Id
    case 4:
    //alert("["+xmlHttp.responseText+"]")
    //成功把数据写入数据库后,把提交的帖子的Id传回来.
    document.all('I_TZText').value=""//帖子已经成功提交并写入了数据库,输入框中的内容已经不再需要了.清空
    tBack_Num=0
    TZ_Id=xmlHttp.responseText
    SendMsg("加载刚提交的回复","Td_ShowFBTZ2");//加载刚提交的回复
    case 5:
    alert("["+xmlHttp.responseText+"]")
    }//判断回调函数要执行怎么样的操作  
    } //页面完成
     }
    //---------------------------------------------------------------------------
      

  18.   

    搞了几天还是得替换 ZT_Text=ZT_Text.replace(/'/g, "<单引号>");
    ZT_Text=ZT_Text.replace(/&#39;/g, "<单引号2>");
    ZT_Text=ZT_Text.replace(/"/g, "<双引号>");
    ZT_Text=ZT_Text.replace(/&quot;/g, "<双引号>");
    ZT_Text=ZT_Text.replace(/&nbsp;/g, "<空格>");
    ZT_Text=ZT_Text.replace(/:/g, "<冒号>");
    ZT_Text=ZT_Text.replace(/;/g, "<分号>");
    ZT_Text=ZT_Text.replace(/#/g, "<井号>");
      

  19.   

    再用这个还原 $ZT_Text2=str_replace('<单引号>',"'",$ZT_Text2); 
    $ZT_Text2=str_replace('<单引号2>',"&#39;",$ZT_Text2); 
    $ZT_Text2=str_replace('\<双引号>',chr(39),$ZT_Text2); 
    $ZT_Text2=str_replace('<双引号>',chr(39),$ZT_Text2);
    $ZT_Text2=str_replace('<空格>',chr(32),$ZT_Text2); 
    $ZT_Text2=str_replace('<冒号>',":",$ZT_Text2); 
    $ZT_Text2=str_replace('<分号>',";",$ZT_Text2); 
    $ZT_Text2=str_replace('<井号>',"#",$ZT_Text2); 
    echo $ZT_Text2;闷