我使用.ajax()
提交表单。
当前脚本包含:
data: dataString,
dataString
包含:
var list = $('.listsummary').val()
班级listsummary
属于用户填写的textarea
,
或将(部分)通过不同的脚本动态填写。
问题是用户几乎一直都在使用'&'标志,例如:
Potato & Patota blah blah blah
这会搞砸dataString
,以便发布在第一个'&'之前写的所有内容找到了。
我如何实现var list
将被正确发送到PHP处理程序,以便使用'&'将整个textarea
内容存储到数据库中?
答案 0 :(得分:4)
您可以使用encodeURIComponent()
对字符串进行编码var list = $('.listsummary').val();
var urlEncoded = encodeURIComponent(list);
答案 1 :(得分:2)
您有2个选项。将数据打包为对象:
data: { list: $('.listsummary').val() }
或编码URI组件:
var dataString = "list=" + encodeURIComponent($('.listsummary').val());
答案 2 :(得分:0)
欢迎来到注射世界。这是一个简单的问题,但您可以采取多种方法:
如果您的数据是简单的非结构化文本,则应将contentType设置为text / plain或application / octet-stream:
$.ajax({
....
data: "Hello & world",
contentType: "text/plain",
...
});
如果您的数据是结构化的键值,那么您应该将数据编码为application / x-www-form-urlencoded。这可以通过将JavaScript键值对象传递给data:
在JQuery中实现$.ajax({
....
data: { text: "Hello & World", location: "Boston" },
...
});
如果您的数据结构更复杂,您应该使用最合适的内容类型(例如JSON,XML,CSV)对数据进行编码,并将contentType设置为(例如" application / json", " application / xml"," text / csv")
$.ajax({
....
data: JSON.stringify(["Hello & world", {"Hello & World"}]),
contentType: "application/json",
...
});
-
在PHP方面,如果您需要处理除application / x-www-form-urlencoded以外的任何内容,您需要直接以字符串形式读取请求正文。这个代码可以没问题:
$body = file_get_contents('php://input');
或者如果你有PECL:
$body = http_get_request_body();
如果您使用Web框架,他们可能还有办法处理自定义内容类型。查看Web框架的文档。