我在URI上运行REST服务,与类似
localhost/1.0/json/host/:list/
其中:list是要搜索的参数。相应的PHP函数(使用Tonic)
public function get($list) {
$list = urldecode($list);
$list = mysql_real_escape_string($list);
正在解码和转义所提供的任何输入。只要不需要真正对输入进行编码,这就可以工作。
相应的js应用程序使用encodeURI组件对输入框中的输入进行编码
var selectedList = encodeURIComponent($('#SelectList').val());
并向上述REST资源发出jQuery.get
$.get("http://localhost/rest/1.0/json/host/"+ selectedList + "/", function(data) {
如果在输入框中选择了类似"923/50"的输入,则参数被正确编码为
XHR位于"localhost/rest/1.0/json/host/923%2F05/"
但是仍然不可能从我的数据库中获取连接到此参数的记录。我一直都是404。所以我的猜测是不可能对"/"这样的字符进行编码。
我该怎么办才能解决这个问题?
在执行REST调用之前,我通过将"/"字符更改为"|"来管理它。Javascript参数的编码是这样工作的。
selectedHostList = encodeURIComponent(
$('#select_hostlist').val().replace('/','|'));
我的PHP REST服务使用以下内容将它们转换回所需的值
$list = urldecode($list);
$list = mysql_real_escape_string($list);
$list = str_replace("|", "/", $list);