我有一个带有文本框和按钮的简单表单,我的目标是让异步请求(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作斗争。有没有人有任何建议?
答案 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());