无法从Ajax POST请求中将带空格的数据导入数据库

时间:2010-05-02 00:56:16

标签: php ajax encoding joomla

我有一个带有文本框和按钮的简单表单,我的目标是让异步请求(jQuery:$ .ajax)将文本发送到服务器(PHP / mysql a la Joomla)以便它可以被添加到数据库表中。

以下是从客户端发送数据的javascript:

var value= $('#myvalue').val();

$.ajax( {
    type:       "POST",
    url:        "/administrator/index.php",
    data:       {   option: "com_mycomponent",
                    task:   "enterValue",
                    thevalue: value,
                    format: "raw"},
    dataType:   "text",
    success:    reportSavedValue
} );

当用户输入带有空格的文本时,就会出现问题。我收到的$ _POST变量删除了所有空格,因此如果用户输入“此字符串有空格”,服务器将获得值“ Thisstringhasspaces ”。

我一直在谷歌上搜索,并找到了许多我需要使用 encodeURIComponent 的参考资料。所以我试过了,但现在我从$ _POST获得的价值是“ This20string20has20spaces ”。

所以它似乎是以期望的方式对其进行编码,只是将百分号符号剥离而不是空格,并留下十六进制数字。

我真的很困惑。似乎这种问题在网络上随处可见并得到解答,并且 encodeURIComponent 被誉为银弹。但显然我正在与不同种类的lycanthrope作斗争。有没有人有任何建议?

2 个答案:

答案 0 :(得分:2)

事实证明,我没有意识到我正在执行额外的过滤。因为这一切都在Joomla中运行,所以我使用的是JRequest::getCmd('thevalue')而不是$_POST['theValue]。事实证明,这个函数可以过滤掉所有那些麻烦的字符,比如'%'。

所以最终的解决方案是在客户端上使用 encodeURIComponent ,正如在网上一致建议的那样:

var value = encodeURIComponent($('#myvalue').val());

在服务器上,为getCmd()交换getVar(),以便更好地控制过滤,并与urldecode()结合使用:

$value = urldecode(JRequest::getvar('thevalue', JREQUEST_ALLOWHTML));

再次,非常感谢Karim79和Cesar。我称你为Harker和Helsing - 我的英雄们! :)

答案 1 :(得分:0)

我可以帮你试试吗?

var value = escape($('#myvalue').val());