Php Can';t从Ajax POST请求将带有空格的数据获取到数据库中

Php Can';t从Ajax POST请求将带有空格的数据获取到数据库中,php,ajax,encoding,joomla,Php,Ajax,Encoding,Joomla,我有一个带有文本框和按钮的简单表单,我的目标是让一个异步请求(jQuery:$.ajax)将文本发送到服务器(PHP/mysql a la Joomla),以便将其添加到数据库表中 下面是从客户端发送数据的javascript: var value= $('#myvalue').val(); $.ajax( { type: "POST", url: "/administrator/index.php", data: { opti

我有一个带有文本框和按钮的简单表单,我的目标是让一个异步请求(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
} );
当用户输入带有空格的文本时,问题就出现了。我收到的$\u POST变量去掉了所有空格,因此如果用户输入“此字符串有空格”,服务器将获得值“ThisStringHassSpaces

我一直在谷歌搜索,找到了很多我需要使用encodeURIComponent的参考资料。所以我已经试过了,但是现在我从$\u POST得到的值是“This20string20has20spaces

所以它似乎是按照我期望的方式编码的,只是去掉了百分号而不是空格,留下了十六进制数


我真的很困惑。这类问题似乎在网络上随处可见,到处都有人问,到处都有人回答,这一组件被誉为“银弹”。但很明显我在和另一种狼人作战。有人有什么建议吗?

麻烦你试试这个好吗

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

结果是,有额外的过滤,我没有意识到我正在执行。因为这些都是通过Joomla运行的,所以我使用了
JRequest::getCmd('thevalue')
而不是
$\u POST['thevalue]
。事实证明,这个函数过滤掉了所有那些麻烦的字符,比如“%”

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

var value = encodeURIComponent($('#myvalue').val());
在服务器上,将
getCmd()
交易为
getVar()
,与
urldecode()


再次感谢卡里姆79和塞萨尔。我称你为哈克和赫尔辛——我今天的英雄!:)

我认为服务器上发生了一些过滤。在我400多年的吸血鬼生涯中,我从未见过一个字符串自动在客户端上删除非前导/尾随空格(通过jquery或其他方式),试图将数据发布到放置在Joomla之外的一个简单的
页面。jquery的哪个版本?尝试设置processData=false;在请求中。如果没用,那是服务器的错。非常感谢卡里姆79和塞萨尔。它在服务器上进行过滤,是Joomla。我是通过JRequest::getCmd()获取值的,它会过滤该值。我想我已经检查了$u POST,以确保它的行为相同,但很明显,我在验证时没有足够的注意。下面是子孙后代的正式答案。当然。我尝试了它,结果与var value=encodeURIComponent($('#myvalue').val());--服务器拾取一个值,其中所有空格都用“20”代替。
$value = urldecode(JRequest::getvar('thevalue', JREQUEST_ALLOWHTML));