繁体   English   中英

在ajax表单中使用“&”提交

[英]Using '&' in ajax form submit

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

当前脚本包含:

data: dataString,

dataString包含:

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

listsummary类属于一个textarea ,用户可以填充该textarea ,或者将通过不同的脚本动态(部分)填充该textarea

问题是用户几乎所有时间都使用“&”符号,例如:

Potato & Patota blah blah blah

dataStringdataString允许发布在找到第一个“&”之前写的所有内容。

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

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

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

您有2个选择。 将数据打包为对象:

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中通过将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框架的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM