微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 – 我的英雄们!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐