使用& # 39;,& # 39;以ajax形式提交

Using '&' in ajax form submit

本文关键字:提交 使用 ajax      更新时间:2023-09-26

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

当前脚本包含:

data: dataString,

dataString包含:

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

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

问题是用户几乎总是使用'&'符号,例如:

Potato & Patota blah blah blah

这破坏了dataString允许发布在找到第一个'&'之前写的所有内容。

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

您可以使用encodeuriccomponent()对字符串进行编码

var list = $('.listsummary').val();
var urlEncoded = encodeURIComponent(list);

你有两个选择。要么将数据打包为对象:

data: { list: $('.listsummary').val() }

或者编码URI组件:

var dataString = "list=" + encodeURIComponent($('.listsummary').val());

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

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

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

    $.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",
      ...
    });
    

,

在PHP端,如果您需要处理application/x-www-form-urlencoded以外的任何内容,则需要将请求体直接作为字符串读取。可以使用下面的代码:

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

或者如果你有PECL:

$body = http_get_request_body();

如果你使用web框架,它们可能也有处理自定义内容类型的方法。检查web框架的文档。