Javascript特殊字符
我有一个带有表单的html。 用户提交表单后,表单中的值将通过ajax发送到数据库。 我的问题是,用户提交的表单在其中一个字段中带有加号(+),加号不会显示在db中 我的代码:Javascript特殊字符,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个带有表单的html。 用户提交表单后,表单中的值将通过ajax发送到数据库。 我的问题是,用户提交的表单在其中一个字段中带有加号(+),加号不会显示在db中 我的代码: function update() { var branch_id = 1; var saleTitle = $("#title").val(); var saleText = $("#text").val(); var imgSrc = $("#imgSrc").html();
function update()
{
var branch_id = 1;
var saleTitle = $("#title").val();
var saleText = $("#text").val();
var imgSrc = $("#imgSrc").html();
var datastr ='branch_id=' + branch_id + '&saleTitle=' + saleTitle +
'&saleText=' + saleText + '&imgSrc=' + imgSrc + '&func=update';
$.ajax({
type: "POST",
url: "update.php",
data: datastr,
success: function(msg){
//alert( "Data Saved: " + msg );
if (msg == "")
{
$("#message").html("Update was successful!");
}
else
{
$("#message").html("Error") + " " + msg;
}
}
});
}
在带有加号的字段上使用:
encodeURIComponent(xxx)
encodeURIComponent('~!@#$%^&*(){}[]=:/,;?+\'"\\')
将导致:
~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C
在带有加号的字段上使用:
encodeURIComponent(xxx)
encodeURIComponent('~!@#$%^&*(){}[]=:/,;?+\'"\\')
将导致:
~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C
传递对象,而不是字符串
var dataobj = {
branch_id : branch_id,
saleTitle : saleTitle,
saleText : saleText,
imgSrc : imgSrc,
func : "update"
};
// …
data: dataobj
然后jQuery将负责转义数据(
+
表示此数据格式中的空格),并将其连接到应用程序/x-www-form-urlencoded数据中。传递对象,而不是字符串
var dataobj = {
branch_id : branch_id,
saleTitle : saleTitle,
saleText : saleText,
imgSrc : imgSrc,
func : "update"
};
// …
data: dataobj
然后jQuery将负责转义数据(
+
表示此数据格式中的空格),并将其连接到应用程序/x-www-form-urlencoded数据中。您可以尝试jQuery序列化
您可以尝试jQuery序列化
您是否检查了从ajax调用中从服务器端获得的数据?您需要检查它是来自js(您正在向我们展示的代码)还是来自PHP(但您没有向我们展示您正在使用的代码)服务器端的数据是没有加号的字符串。数据库中的列类型是什么?@nikc.org它是带有utf_general_ci编码的varchar。您是否检查了从ajax调用中获得的服务器端数据?您需要检查它是来自js(您正在向我们展示的代码)还是来自PHP(但您没有向我们展示您正在使用的代码)。服务器端的数据是没有加号的字符串。您的数据库中的列类型是什么?@nikc.org它是带有utf_general_ci编码的varchar。这将对整个查询字符串进行编码,不是它的一个组件。实际上,您应该在单个变量(
branch\u id
,saleTitles
)周围使用encodeURIComponent。该示例仍然无效,因为它将值直接分配给数据属性,而不是在查询字符串中使用它。@Quentin我看不出问题,我对其进行了编码并将其作为表单post发布。以查询字符串的形式发送它是不好的。@RoyiNamir-您的示例将encodeuricomponent
的输出分配给数据
属性。它需要合并到数据中(例如,在问题中启动var datastr
的行上使用,而不是启动data
的行)。这将编码整个查询字符串,而不是它的一个组件。实际上,您应该在各个变量周围使用encodeURIComponent(branch\u id
,saleTitles
)该示例仍然不完整,因为它直接将值赋给数据属性,而不是在查询字符串中使用它。@Quentin我看不出问题,我对其进行编码并将其作为表单post发布。以查询字符串的形式发送它是不好的。@RoyiNamir-您的示例将encodeuricomponent
的输出分配给数据
属性。需要将其合并到数据中(例如,在问题中启动var datastr
的行上使用,而不是启动data
的行上使用)。这不起作用。并非所有数据都由表单字段的值组成:var imgSrc=$(“#imgSrc”).html()代码>那不行。并非所有数据都由表单字段的值组成:var imgSrc=$(“#imgSrc”).html()代码>