Codeigniter 2.0.2, TinyMCE lub CKEditor – atrybut style usuwa się po zatwierdzeniu formularza
Jeśli korzystasz z WYSIWYG TinyMCE lub CKEditor oraz z framework’a CodeIgniter w wersji >2.0, możesz natrafić na problem znikających styli.
Nadajesz styl np. <span style=”color:blue;”></span> zatwierdzasz formularz i w efekcie otrzymujesz <span></span>.
Gdzie się podział style=”” ?
Zapewne masz włączoną opcję w config.php :
$config['global_xss_filtering'] = TRUE;
Po wyłączeniu globalnego filtrowania nasze WYSIWYG nie tracą już żadnych styli.
Osobiście nie chcialam wyłączać tej ocpji więc zrobiłam obejście ;o)
Edytowane – na podstawie sugestii Bart’a żeby nie mieszać w plikach źródłowych ;o)
Po coś to zabezpieczenie zostało dodane, tak więc aby się go całkiem nie pozbywać utworzyła tablicę w której przechowywane są adresy dla których tag style ma nie być usuwany.
Należy utworzyć plik MY_Security.php jako rozszerzenie orginalnej klasy Security i dodać zmodyfikowaną funkcję _remove_evil_attributes.
protected function _remove_evil_attributes($str, $is_image){
// All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
$allowed = array("adresy dla których style ma nie być usuwany bez domeny na przykład '/admin/edittext/'");
if(in_array($_SERVER['REQUEST_URI'],$allowed)){
$evil_attributes = array('on\w*', 'xmlns');
}else{
$evil_attributes = array('on\w*', 'style', 'xmlns');
}
if ($is_image === TRUE){
/*
* Adobe Photoshop puts XML metadata into JFIF images,
* including namespacing, so we have to allow this for images.
*/
unset($evil_attributes[array_search('xmlns', $evil_attributes)]);
}
do {
$str = preg_replace(
"#<(/?[^><]+?)([^A-Za-z\-])(".implode('|', $evil_attributes).")(\s*=\s*)([\"][^>]*?[\"]|[\'][^>]*?[\']|[^>]*?)([\s><])([><]*)#i",
"<$1$6",
$str, -1, $count
);
} while ($count);
return $str;
}
I to wszystko.
Straciłem prawie całą noc szukając rozwiązania – uratowałaś mi chociaż te kilka godzin snu. Dziękuję.
@webmaniak
Umieść ten plik w katalogu 'core' Twojej aplikacji. Czyli jeśli nie zmieniałeś nazw katalogów to do /application/core
Witam,
mam podobny problem w codeigniterze z ckeditor, można prosić o przykład wykorzystania tej klasy? Tzn. gdzie dokładnie co umieścić. Dopiero się uczę OOP i tego frameworka, dlatego będę wdzięczny za podpowiedź.
Kłaniam się do podłogi :) Dziękuje.