Php Can';t从Ajax POST请求将带有空格的数据获取到数据库中
我有一个带有文本框和按钮的简单表单,我的目标是让一个异步请求(jQuery:$.ajax)将文本发送到服务器(PHP/mysql a la Joomla),以便将其添加到数据库表中 下面是从客户端发送数据的javascript: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
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));