我正在使用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的输出,它应该同时使用双引号和单引号
答案 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;”),然后检查代码的功能。
如果它仍然是隐藏的,那么页面上的位置无关紧要。