--- sites/all/modules/ckeditor/includes/ckeditor.page.inc 2011-09-13 20:35:30.000000000 +0100 +++ sites/all/modules/ckeditor/includes/ckeditor.page.inc 2011-09-13 20:37:28.963492000 +0100 @@ -191,16 +191,24 @@ function ckeditor_filter_xss() { if (!is_string($module_delta)) { continue; } - $module = strtok($module_delta, "/"); - $delta = strtok("/"); - $format = strtok("/"); + $filter = new stdClass(); + $filter->module = strtok($module_delta, "/"); + $filter->delta = strtok("/"); + $filter->format = strtok("/"); - if (!module_hook($module, 'filter')) { + if (!module_hook($filter->module, 'filter')) { continue; } + $filters_to_apply[] = $filter; + } + + foreach ((array) $filters_to_apply as $filter) { + $text = module_invoke($filter->module, 'filter', 'prepare', $filter->delta, $filter->format, $text); + } + foreach ((array) $filters_to_apply as $filter) { //built-in filter module, a special case where we would like to strip XSS and nothing more - if ($module == 'filter' && $delta == 0) { + if ($filter->module == 'filter' && $filter->delta == 0) { preg_match_all("|]*)>|i", $text, $matches); if ($matches[1]) { $tags = array_unique($matches[1]); @@ -208,7 +216,7 @@ function ckeditor_filter_xss() { } } else { - $text = module_invoke($module, 'filter', 'process', $delta, $format, $text); + $text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $filter->format, $text); } } @@ -216,4 +224,4 @@ function ckeditor_filter_xss() { echo $text; exit; -} +} \ No newline at end of file