从 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的主要内容,如果未能解决你的问题,请参考以下文章