Php 在MySQL中插入符号的问题

Php 在MySQL中插入符号的问题,php,javascript,mysql,pdo,Php,Javascript,Mysql,Pdo,我试图解决这个问题已经有一段时间了,我花了无数的时间在网上寻找解决方案。所以我想我会去找你们的,因为我对这个问题束手无策。基本上我有一个CMS系统,我之前设计过,我最近用PDO更新到现代标准,比如,现在我似乎有一个问题,在MySQL数据库中插入符号(&),所有内容都设置为“UTF-8”,PDO连接,MySQL排序,所有内容,然而,由于某种原因,当textarea的表单中有一个符号时,数据会被发送,但在到达该符号时会被切断,就好像它正在解析并切断它,因为它认为该符号是一个漏洞 以下是我在PHP中插

我试图解决这个问题已经有一段时间了,我花了无数的时间在网上寻找解决方案。所以我想我会去找你们的,因为我对这个问题束手无策。基本上我有一个CMS系统,我之前设计过,我最近用PDO更新到现代标准,比如,现在我似乎有一个问题,在MySQL数据库中插入符号(&),所有内容都设置为“UTF-8”,PDO连接,MySQL排序,所有内容,然而,由于某种原因,当textarea的表单中有一个符号时,数据会被发送,但在到达该符号时会被切断,就好像它正在解析并切断它,因为它认为该符号是一个漏洞

以下是我在PHP中插入的代码:

            $fbl = $_POST['fblValue'];
        $fbr = $_POST['fbrValue'];
        $sbl = $_POST['sblValue'];
        $sbr = $_POST['sbrValue'];
        $tbl = $_POST['tblValue'];
        $tbr = $_POST['tbrValue'];
        $fblDisabled = $_POST['fblDisabled'];
        $fbrDisabled = $_POST['fbrDisabled'];
        $sblDisabled = $_POST['sblDisabled'];
        $sbrDisabled = $_POST['sbrDisabled'];
        $tblDisabled = $_POST['tblDisabled'];
        $tbrDisabled = $_POST['tbrDisabled'];
        $footer = $_POST['footerValue'];
        $copyright = $_POST['copyrightValue'];

        $statement = $conn->prepare("UPDATE pages SET FBL = :fbl, 
                                                    FBLDisabled = :fblDisabled, 
                                                    FBR = :fbr, 
                                                    FBRDisabled = :fbrDisabled, 
                                                    SBL = :sbl, SBLDisabled = :sblDisabled, 
                                                    SBR = :sbr, SBRDisabled = :sbrDisabled, 
                                                    TBL = :tbr, TBLDisabled = :tblDisabled, 
                                                    TBR = :tbr, TBRDisabled = :tbrDisabled, 
                                                    Footer = :footer, 
                                                    Copyright = :copyright 
                                                    WHERE ID = :pageToEdit");
        $statement->bindParam(":fbl", $fbl);
        $statement->bindParam(":fblDisabled", $fblDisabled);
        $statement->bindParam(":fbr", $fbr);
        $statement->bindParam(":fbrDisabled", $fbrDisabled);
        $statement->bindParam(":sbl", $sbl);
        $statement->bindParam(":sblDisabled", $sblDisabled);
        $statement->bindParam(":sbr", $sbr);
        $statement->bindParam(":sbrDisabled", $sbrDisabled);
        $statement->bindParam(":tbl", $tbl);
        $statement->bindParam(":tblDisabled", $tbDisabled);
        $statement->bindParam(":tbr", $tbr);
        $statement->bindParam(":tbrDisabled", $tbrDisabled);
        $statement->bindParam(":footer", $footer);
        $statement->bindParam(":copyright", $copyright);
        $statement->bindParam(":pageToEdit", $pageToEdit);
        $statement->execute();              
    }
我还想补充一点,我使用ajax发送数据,是否有可能与此有关

以下是AJAX代码:

<script type="text/javascript">


        function savePage(str1, str2, str3, str4, str5, str6, str7, str8, str9, str10, str11, str12, str13, str14)
        {
            var xmlhttp;

            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }

            xmlhttp.open("post", "putEditedPage.php", true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send("fblValue=" + str1 + "&fbrValue=" + str2 + "&sblValue=" + str3 + "&sbrValue=" + str4 + "&tblValue=" + str5 + "&tbrValue=" + str6 + "&fblDisabled=" + str7 + "&fbrDisabled=" + str8 + "&sblDisabled=" + str9 + "&sbrDisabled=" + str10 + "&tblDisabled=" + str11 + "&tbrDisabled=" + str12 + "&footerValue=" + str13 + "&copyrightValue=" + str14);
            document.getElementById('blackout').style.display="block";
            document.getElementById('Alert').style.display="block";
            document.getElementById('Alert').style.marginTop=((window.innerHeight/2)+((window.innerHeight/100) * 35))+"px";
            setTimeout(function(){
                document.getElementById('blackout').style.display='none';           
                document.getElementById('Alert').style.display='none';
            }, 1250);
        }
        function insertTab(o, e)
        {
            var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
            if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.altKey)
            {
                var oS = o.scrollTop;
                if (o.setSelectionRange)
                {
                    var sS = o.selectionStart;
                    var sE = o.selectionEnd;
                    o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
                    o.setSelectionRange(sS + 1, sS + 1);
                    o.focus();
                }
                else if (o.createTextRange)
                {
                    document.selection.createRange().text = "\t";
                    e.returnValue = false;
                }
                o.scrollTop = oS;
                if (e.preventDefault)
                {
                    e.preventDefault();
                }
                return false;
            }
            return true;
        }

    </script>

功能保存页(str1、str2、str3、str4、str5、str6、str7、str8、str9、str10、str11、str12、str13、str14)
{
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
open(“post”,“putEditedPage.php”,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
xmlhttp.send(“fblValue=“+str1+”&fblDisabled=“+str2+”&sblValue=“+str3+”&sbrValue=“+str4+”&tblValue=“+str5+”&tbrValue=“+str6+”&fblDisabled=“+str7+”&fblDisabled=“+str8+”&sblDisabled=“+str9+”&sbrDisabled=“+str10+”&tblDisabled=“+str11+”&tbrDisabled=“+str12+”&str13+”&str14+”);
document.getElementById('blackout').style.display=“block”;
document.getElementById('Alert').style.display=“block”;
document.getElementById('Alert').style.marginTop=((window.innerHeight/2)+(window.innerHeight/100)*35))+“px”;
setTimeout(函数(){
document.getElementById('blackout').style.display='none';
document.getElementById('Alert').style.display='none';
}, 1250);
}
函数插入选项卡(o,e)
{
var kC=e.keyCode?e.keyCode:e.charCode?e.charCode:e.which;
如果(kC==9&&!e.shiftKey&&!e.ctrlKey&&!e.altKey)
{
var oS=o.scrollTop;
如果(o.setSelectionRange)
{
var sS=o.selectionStart;
var sE=o.selectionEnd;
o、 value=o.value.substring(0,sS)+“\t”+o.value.substr(sE);
o、 设置选择范围(sS+1,sS+1);
o、 焦点();
}
else if(o.createTextRange)
{
document.selection.createRange().text=“\t”;
e、 returnValue=false;
}
o、 scrollTop=oS;
如果(如默认)
{
e、 预防默认值();
}
返回false;
}
返回true;
}

提前感谢各位,干杯。

不要忘记您的使用能力,也不要忘记您的使用能力,请点击此处:

xmlhttp.send("fblValue=" + str1 + "&fbrValue=" + str2 + "&sblValue=" + str3 + ...
                                   ^                     ^
看到那些符号了吗?它们是URL编码中的特殊字符。要提交包含符号本身的值,需要使用URL编码转义该符号。因此,在将值连接到URL编码字符串之前,请先删除这些值

也许我可以让你感兴趣:

就在这里:

xmlhttp.send("fblValue=" + str1 + "&fbrValue=" + str2 + "&sblValue=" + str3 + ...
                                   ^                     ^
看到那些符号了吗?它们是URL编码中的特殊字符。要提交包含符号本身的值,需要使用URL编码转义该符号。因此,在将值连接到URL编码字符串之前,请先删除这些值


也许我可以让您感兴趣:

PDO、Ajax和XML中支持特殊字符

这里一定有个小洞:“一切都设置为‘UTF-8’”

检查以下内容:

  • HTML页面字符集(此处:

  • JS文件的编码

  • XML(我不知道在哪里)

  • 数据库连接(设置名称、排序规则)

  • specyfic列上的排序规则集

  • 源文件的字符集

  • 如果您正在使用JavaScript中的某个编辑器,那么配置文件中可能有字符集


  • 您可以尝试“逐步”调试。您可以尝试在不使用AJAX的情况下插入符号和。

    PDO、AJAX和XML中支持特殊字符

    这里一定有个小洞:“一切都设置为‘UTF-8’”

    检查以下内容:

  • HTML页面字符集(此处:

  • JS文件的编码

  • XML(我不知道在哪里)

  • 数据库连接(设置名称、排序规则)

  • specyfic列上的排序规则集

  • 源文件的字符集

  • 如果您正在使用JavaScript中的某个编辑器,那么配置文件中可能有字符集


  • 您可以尝试“逐步”调试。您可以尝试在不使用AJAX的情况下插入符号AND。

    因为符号AND的“html代码”是
    &,其中包含一个符号…?哈哈,你在那里打败了我deceze,我屈服于不合逻辑的想法。因为一个符号的“html代码”是
    &,其中包含一个符号…?哈哈,你在那里打败了我deceze,我屈服于不合逻辑的想法。刚刚纠正了那个问题,对不起,伙计们。刚刚纠正了那个问题,对不起,伙计们。它不起作用,我将发送字符串移动到一个新变量中,并使用了“encodeURIComponent”函数,但它仍然在做