在'&'之后,Javascript值会被切断字符

时间:2015-05-10 19:00:14

标签: javascript ajax

所以我使用Javascript和Ajax相对较新,并使用它们将数据提交到数据库进行实时更新,但我注意到当有一个'&&#39 ;输入到我的输入/ textareas中的字符,当我得到该值时,它会在'&'之后切断字符串。

我已经在下面的代码行之后使用alert函数测试了该值,并且完整字符串在那里,但不完全确定如何解决这个问题。

我试图更换'&' &字符,但无法使其正常工作。这是我用来获取值和我尝试使用的替换。 注意:我使用nicEditor并且必须使用代码的第一行从正确的字段中获取文本,该字段将文本存储在编辑器中。

var boxval = $('#statusContentForum').find('.nicEdit-main').text();
var dataString = 'statusContent='+ boxval;
var dataString = dataString.replace(/&/g, '&');
var dataString = dataString.replace(/\|&;\$%@"<>\(\)\+,/g, "");

并使用这些字符进行测试。

abcdefghijklmnopqrstuvwxyz 1234567890-=`~!@#$%^&*()_+{}[]|\"':;,<.>?/

但它只会产生这个

abcdefghijklmnopqrstuvwxyz 1234567890-=`~!@#$%^ 

你们有没有遇到过这个?我很感激任何帮助,如果您需要更多代码,请告诉我。我可以提供它。

********* UPDAT完整代码*********

这是完整的代码。

JS / AJAX:

$(function() {
            //Update Message...
            $(".update_button").click(function() {
                //var boxval = $("#statusContent").val();
                var boxval = $('#statusContentForum').find('.nicEdit-main').text();
                var dataString = 'statusContent='+ boxval;

                //var dataString = dataString.replace(/>/g, '&gt;');
                //var dataString = dataString.replace(/</g, '&lt;');
                var dataString = dataString.replace(/&/g, '&amp;');
                var dataString = dataString.replace(/\|&;\$%@"<>\(\)\+,/g, "");

                if(boxval=='') {
                    alert("Please Enter Some Text");
                } else {
                    $("#flash").show();
                    $("#flash").fadeIn(400).html('<img src="images/ajax-loader.gif" align="absmiddle"> <span class="loading">Loading Comment...</span>');
                    //  alert(dataString);
                    //  throw new Error("Something went badly wrong!");
                    $.ajax({
                        type: "POST",
                        url: "ajax/statusPost.php",
                        data: dataString,
                        cache: false,
                        success: function(html){
                            $("ol#update").prepend(html);
                            $("ol#update li").slideDown("slow");
                            var clearVal = nicEditors.findEditor("statusContent");
                            clearVal.setContent("");
                            $("#flash").hide();
                        }
                    });
                } return false;
            });
});

如果需要,可以使用HTML。

<form name="newstatus" id="statusContentForum" action="profile.php" method="post" class="commentForm">
    <textarea name="statusContent" id="statusContent" placeholder="What's on your mind?"></textarea>
    <input type="submit" value="Update" name="submit" class="update_button"/>
</form>

2 个答案:

答案 0 :(得分:2)

您正在手动构建an application/x-www-form-urlencoded string,但无法正确编码&。要将&表示为该格式的数据,您需要将其替换为%26

encodeURIComponent功能会为您完成此操作。

但是,您正在使用jQuery,因此您根本不应该手动执行此操作。传递data对象而不是字符串。

data: {
    statusContent: boxval
},

答案 1 :(得分:1)

我假设您熟悉其他编程语言,甚至可能是关键字或敏感字符。始终记得将其作为解决您问题的首选方法。在这种情况下,就是这样。如果您要为该变量编码字符串,则设置它应该可以正常工作。

尝试控制台记录它。

console.log(encodeURIComponent('My Var: ' + dataString));

更多信息,请参见此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent