0

我使用 AJAX 和 JQuery 提交表单。

serializedData = $form.serialize();

request = $.ajax({
    url: "processData.php",
    type: "post",
    data: serializedData
});

问题是当我使用 processData.php 上的数据时,文本是 urlencoded。

cuando=Una+fecha+%C3%BAnica

我尝试使用 php 的 urldecode() 但它不起作用。它仍然是urlencoded..

$cuando = $_POST['cuando']; 
$cuando = urldecode($cuando);

有什么建议吗?非常感谢!

4

3 回答 3

1

首先,我尝试更改 JQuery $.ajax 函数的 contentType 属性,但没有成功:

  $.ajax({
    url: "insertar_datos.php",
    type: "post",
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
    data: serializedData

因此,我发现在 JQuery-ajax 上使用不是 UTF8 的其他字符集编码时存在一些问题。

http://forum.jquery.com/topic/serialize-problem-with-latin-1-iso-8859-1-and-solution

然后,我毫无希望地尝试了 php 函数 utf8_decode():

utf8_decode($_POST['cuando']);

它奏效了。我在这个链接上发现的是:

“utf8_decode 只是将一个以 UTF-8 编码的字符串转换为 ISO-8859-1。更合适的名称是 utf8_to_iso88591。如果您的文本已经以 ISO-8859-1 编码,则不需要此函数。如果您不想使用 ISO-8859-1,你不需要这个功能。”

因此,如果有人使用 iso-8859-1 并且在 ajax 发布的数据方面遇到了一些问题。您可以使用 utf8_decode() 确定对其进行解码。也许有一种更简单的方法可以在发布所有数据之前对其进行解码,但是正如您所见,它对我不起作用。

如果有人知道更好/更有效的方法,我会很高兴地选择你的答案。

希望它可以帮助某人,

问候!

于 2013-06-24T21:15:44.440 回答
1

无法重现它..我做了这个:

<?php
echo urldecode('Una+fecha+%C3%BAnica');

输出是这样的:

Una fecha única

我唯一的猜测是,在您的问题中,您的意思是您的输出仍然是我的输入,在这种情况下,您在另一端以某种方式对其进行了双重 urlencoding

于 2013-06-22T18:34:17.527 回答
1

表单数据的编码方式与没有 Ajax 的普通 HTML 表单提交一样,所以没有什么特别的,只需使用:

echo $_POST['cuando'];

PHP 已经解码并解析了请求正文(发布数据)。

于 2013-06-22T18:37:56.203 回答