从ajax / Jquery序列化表单解码$ _POST数据

时间:2013-06-22 18:16:32

标签: php jquery ajax post character-encoding

我使用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);

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

3 个答案:

答案 0 :(得分:1)

无法重现它......我做到了:

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

输出是这样的:

Unafechaúnica

我唯一的猜测是,在你的问题中,你的意思是你的输出仍然是我的输入,在这种情况下,你在某种程度上是在另一端双重编码

答案 1 :(得分:1)

表单数据的编码方式与没有Ajax的普通HTML表单提交方式相同,因此没有什么特别的,只需使用:

echo $_POST['cuando'];

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

答案 2 :(得分: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']);

有效。我在link上找到的是:

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

所以,如果有人使用iso-8859-1并且在ajax发布的数据方面遇到了一些问题。您可以使用utf8_decode()确定解码它。也许在发布之前有一种更简单的方法来解码所有数据,但正如你所看到的那样对我没用。

如果有人知道更好/更有效的方式,我会愉快地选择你的答案。

希望它有所帮助,

<强>问候!