【发布时间】:2013-02-02 05:06:21
【问题描述】:
我有一个奇怪的情况,我似乎无法在 Google 上找到答案。
我正在获取一个 javascript 数组,对其应用 JSON.stringify,然后通过 AJAX 发布到 php 控制器,以将现在的 json_encoded 数组存储在表中。通过 ajax 发布后,$_POST 以某种方式剥离了正在提交的 html 上的样式属性。
这是通过 javascript/jquery 抓取的示例 html:
<"div class="blahblah" style="border:1px solid #000000;"><strong>test</strong></div>
这里是 AJAX 邮政编码:
var post_data = [];
$("divclasshere").each(function(){
post_data.push({html:$(this).html()});
});
var data = JSON.stringify(post_data);
$.ajax({
type: "POST",
url: "save",
data: { content: data },
success: function(result){
}
});
这是将其保存到数据库的控制器函数:
$data = array(
'content' => $this->input->post('content')
);
$this->db->update('table', $data);
如果我在 PHP 控制器上的数据上打印_r,我会得到(示例)
<div class="blahblah"><strong>test</strong></div>
但 div class="blahblah" 元素上没有样式属性。如果这有什么不同,我正在使用 CodeIgniter?在某些情况下,它会去除第一部分:style="border:1px 并保留 #000000;"
编辑:
这是发布的内容(例如):
content:[{"html":"<div class=\"content\" style=\"border:1px solid #000000;\"></div>"}]
这是得到 print_r'd 的内容:
<pre>[{"html":"<div class=\"content\" solid #000000;\"></div>"}]
【问题讨论】:
-
您是否在配置中启用了
global_xss_filtering? -
@Yan,我愿意...不过,这主要不是为了防止跨域的事情发生吗?
-
很难说。通过在 AJAX 处理程序 PHP 脚本中输出变量开始调试...
var_dump($yourVariable);。在 Firefox 中使用 Firebug(它是一个附加组件)中的控制台来查看输出。逐步检查,直到找到失败的地方。 -
它也会删除样式。
-
为什么要在标签中添加样式,而您已经添加了一个类?如果样式不同,则为这些样式创建一个类,因为类属性允许类列表。这个问题是由 XSS 过滤器引起的,但是您希望启用它来保护您,所以我个人会找到一种不会触发过滤的方法,例如放置两个类。
标签: javascript jquery ajax codeigniter styles