我有一个带有函数admin_getcontents的ImportController。
function admin_getcontents($url = null)
{
$contents = json_decode(file_get_contents(($url)),true);
//some stuff
}
通过ajax我调用/ admin / import / getcontents / with:
$.get('/admin/import/getcontents/'+ encodeURIComponent($('#urlcheck').val()) ,function(data) {
$('#importtable').html(data);
$('#busy-indicator').fadeOut('high');
});
所以我打电话给页面:/ admin / import / getcontents / http%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F
Apache给我一个404错误。如果我调用/ admin / import / getcontents / 1页面正确加载。所以我想通过一个?在参数之前:
管理员/进口/ getcontents /?HTTP%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F
现在我没有收到404错误,但admin_getcontents()中的$ url param为空。我怎样才能实现上述目标?
由于
答案 0 :(得分:0)
快速解决方法是对您的网址进行三重网址编码:
// javascript
$.get('/admin/import/getcontents/'+ encodeURIComponent(encodeURIComponent(encodeURIComponent($('#urlcheck').val()))) ,function(data) {
$('#importtable').html(data);
$('#busy-indicator').fadeOut('high');
});
然后url在你使用它之前在你的php中解码它:
// php
function admin_getcontents($url = null)
{
$url = urldecode(urldecode($url));
$contents = json_decode(file_get_contents(($url)),true);
//some stuff
}
编辑以下评论:
您需要设置路由以传递url参数。看看你的设置,它应该看起来像:
Router::connect('/admin/import/getcontents/:url', array(
'controller' => 'import',
'action' => 'getcontents',
'admin' => true),
array(
'url' => '(.*)',
'pass' => array('url')
)
);