从 CKEDITOR 槽 ajax 发送文本时 Codeigniter 中的错误 403

Posted

技术标签:

【中文标题】从 CKEDITOR 槽 ajax 发送文本时 Codeigniter 中的错误 403【英文标题】:Error 403 in Codeigniter when sending text from CKEDITOR trough ajax 【发布时间】:2012-06-10 16:48:16 【问题描述】:

我正在使用 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 的输出,它应该可以使用双引号和单引号

【问题讨论】:

您使用urldecode()的任何原因? 我正在对正文进行编码以查看是否解决了问题,但我忘记将其从 php 中删除。编辑:删除它,但问题仍然存在。这根本没有意义,这让我发疯了哈哈 用更多信息编辑了我的帖子 你能不能把style='display:none'中的双引号改成引号我知道这听起来很傻,但这种行为很奇怪 请将此讨论移至聊天。不鼓励在一个帖子上使用过多的 cmets。 【参考方案1】:

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

【讨论】:

我不控制 CKEDITOR 的输出。它应该适用于双引号和单引号。好提示+1 这只是意味着:'(让我们看看如何更改该输出 我不知道我们为什么这么复杂,你的变量的内容是纯html吗?在将数据发送到 codeigniter 之前,您可以将所有双引号替换为单引号。我理解你的观点,它应该是相同的,但是在 codeigniter 代码的某个地方,有人忘记了防止代码注入,我认为这不是主题:( body var 是纯 html。当然用单引号替换双引号可能会起作用,虽然我不知道错误是否会在以后出现 ***.com/questions/5795682/… 这个问题好像和我的一样。我要联系我的管理员【参考方案2】:

这样的双重编码和发送怎么样?

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

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

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

在另一端,只需使用段解码:

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

【讨论】:

【参考方案3】:

我认为你应该使用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>

如果事情没有解决,请尝试检查您的日志。您可能会看到实际请求的是哪个 url。

【讨论】:

感谢您的回答。问题仍然存在,实际调用了 url,仅当文本 style="display:none" 出现在标题、正文或其他字段上时才会出现错误【参考方案4】:

根据您的评论,当“显示:无”时出现问题

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

我假设这是因为浏览器随后将其转储到“无用的东西”箱中并断开所有连接器的正常行为以节省内存/cpu 空间或其他东西。

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

如果它还是被隐藏了,它在页面上的什么位置都没有关系。

【讨论】:

感谢您的回答。这不是显示问题,当我尝试通过 POST 发送 text style="display:none;" 时服务器返回错误

以上是关于从 CKEDITOR 槽 ajax 发送文本时 Codeigniter 中的错误 403的主要内容,如果未能解决你的问题,请参考以下文章

ckeditor插入或更新在第一次尝试时不起作用

ajax提交时 富文本CKEDITOR 获取不到内容

CKEDITOR 在首次提交时不通过 ajax 提交数据

CKEditor,AJAX Save

如何使用 JQuery 向 CKEditor 添加数据

我可以从Word粘贴纯文本并在CKEditor中启用粗体,斜体按钮吗?