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

我有一个带有文本框和按钮的简单表单,我的目标是让异步请求(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变量删除了所有空格,因此如果用户输入“This string has spaces”,服务器将获得值“Thisstringhasspaces”.

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

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

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

解决方法:

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

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

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

在服务器上,为getVar()交换getCmd(),它允许更多地控制过滤,结合urldecode():

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

再次,非常感谢Karim79和Cesar.我称你为Harker和Helsing – 我的英雄们!

相关文章

$.AJAX()方法中的PROCESSDATA参数 在使用jQuery的$.ajax()方...
form表单提交的几种方式 表单提交方式一:直接利用form表单提...
文章浏览阅读1.3k次。AJAX的无刷新机制使得在注册系统中对于...
文章浏览阅读1.2k次。 本文将解释如何使用AJAX和JSON分析器在...
文章浏览阅读2.2k次。/************************** 创建XML...
文章浏览阅读3.7k次。在ajax应用中,通常一个页面要同时发送...