当从CKEDITOR通过ajax发送文本时,Codeigniter中的错误403

时间:2012-06-06 16:19:00

标签: php jquery ajax codeigniter http-status-code-403

我正在使用CKEDITOR和ajax在我创建的网站上发布新闻。

一切正常,但显然当我发送包含 style =“display:none”的文字时,例如,发布时我收到403错误。它不会发生如果我删除该行或更改字母,如 style =“misplay:none”

这是我的代码

PHP

$title=$this->input->post('title');
$body=$this->input->post('body');
$published=$this->input->post('published');
$tags=$this->input->post('tags');

调用Ajax

$.ajax({
    url: '/reviews_aj/addreviews',
    type: 'POST',
    data: {'title':title,'body':body,'published':published,'tags':tags},
    success: function(result){
         ...            

    }
});

最奇怪的部分是实际调用了 addreviews 函数,但$ _POST似乎是空的并且返回了403错误。

这是发送的内容

id=18&title=asdasdas&body=style%3D%22display%3Anone%22&published=false&tags=

var_dump($ _ POST); 返回一个空数组。

我开始认为问题是Jquery,以某种方式以错误的方式转换特殊字符(并且弄乱了Codeigniter的uri重新路由。但我真的不知道

编辑@shershams 你让我试试这个。

var temp = {'title':title,'body':body,'published':published,'tags':tags}; 
console.log( JSON.stringify(temp, undefined, 4) );

这是输出

{
    "title": "style=\"display:none\"",
    "body": "<p>\n\tasdasd</p>\n",
    "published": false,
    "tags": ""
}

完全符合我的预期

编辑:

注意到通过一个简单的POST(不是ajax,一个简单的表单)发送它也不会工作。

编辑:

style ='display:none'单引号有效,但我不控制CKEDITOR的输出,它应该同时使用双引号和单引号

4 个答案:

答案 0 :(得分:0)

将双引号更改为单引号:D!

答案 1 :(得分:0)

如何对此进行双重编码和发送?

<?php $string = urlencode(urlencode("style=\"display: none;\"";)) ?>

然后通过ajax发送该编码的字符串:

$.ajax({
    url: '/reviews_aj/addreviews/$string',
    type: 'POST'
});

另一方面,只需使用段解码:

$text = urldecode(urldecode($this->uri->segment(3)));

答案 2 :(得分:0)

我认为你应该使用site_url()。不确定某些网址会发生什么,例如/foo/bar

这是answer for similar question。试一试:)

<script type="text/javascript">
    var site_url = '<?php echo site_url(); ?>';
    var url = site_url + '/controller/action/param1/param2';
    // AJAX with url
</script>

如果无法解决问题,请尝试检查日志。您可能会看到实际请求了哪个网址。

答案 3 :(得分:0)

请注意,“display:none”

时会出现问题

当一个元素在显示时,它的行为总是奇怪和意外,它不会改变位置,不会在某些浏览器中返回innerHTML等...

我是hypothise,因为浏览器然后将其转储到“无用的东西”bin中并断开所有连接器的正常行为以节省内存/ cpu空间等。

尝试将视口的绝对“外部”定位(“position:absolute; top:-100px; left:-100px;”),然后检查代码的功能。

如果它仍然是隐藏的,那么页面上的位置无关紧要。