使用'&'以ajax形式提交

时间:2015-07-17 01:23:03

标签: javascript jquery html ajax

我使用.ajax()提交表单。

当前脚本包含:

data: dataString,

dataString包含:

var list    = $('.listsummary').val()

班级listsummary属于用户填写的textarea, 或将(部分)通过不同的脚本动态填写。

问题是用户几乎一直都在使用'&'标志,例如:

Potato & Patota blah blah blah

这会搞砸dataString,以便发布在第一个'&'之前写的所有内容找到了。

我如何实现var list将被正确发送到PHP处理程序,以便使用'&'将整个textarea内容存储到数据库中?

3 个答案:

答案 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)

欢迎来到注射世界。这是一个简单的问题,但您可以采取多种方法:

  1. 如果您的数据是简单的非结构化文本,则应将contentType设置为text / plain或application / octet-stream:

    $.ajax({
      ....
      data: "Hello & world",
      contentType: "text/plain",
      ...
    });
    
  2. 如果您的数据是结构化的键值,那么您应该将数据编码为application / x-www-form-urlencoded。这可以通过将JavaScript键值对象传递给data:

    在JQuery中实现
    $.ajax({
      ....
      data: { text: "Hello & World", location: "Boston" },
      ...
    });
    
  3. 如果您的数据结构更复杂,您应该使用最合适的内容类型(例如JSON,XML,CSV)对数据进行编码,并将contentType设置为(例如" application / json", " application / xml"," text / csv")

    $.ajax({
      ....
      data: JSON.stringify(["Hello & world", {"Hello & World"}]),
      contentType: "application/json",
      ...
    });
    
  4. -

    在PHP方面,如果您需要处理除application / x-www-form-urlencoded以外的任何内容,您需要直接以字符串形式读取请求正文。这个代码可以没问题:

    $body = file_get_contents('php://input');
    

    或者如果你有PECL:

    $body = http_get_request_body();
    

    如果您使用Web框架,他们可能还有办法处理自定义内容类型。查看Web框架的文档。