我使用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);
有什么建议吗?非常感谢!
答案 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()确定解码它。也许在发布之前有一种更简单的方法来解码所有数据,但正如你所看到的那样对我没用。
如果有人知道更好/更有效的方式,我会愉快地选择你的答案。
希望它有所帮助,
<强>问候!强>