FCKeditor i demo blog

Witam ponownie.

Zintegrowałem ze stroną ten edytor i wszystko gra oprócz jednej rzeczy, po dodaniu posta (pole ‘cocntent’) do bazy (tekst zapisywany do bazy wraz z tagami html) ale podczas wyświetlania strona nie ukrywa tych tagów tylko traktuje je jak normalnie znaki i je wyświetla. Trochę to dziwnie wygląda “<p> coś tam </p>”.

Ustawiłem opcję ‘FCKConfig.FullPage = true ;’ która to powinna cały tekst oblać znacznikami <html></html> ale to niestety nie działa.

Stosowałem ten edytor na innej stronie i tam jest OK, a to nie mam pojęcia.

No dobra, poszukałem i znalazłem rozwiązanie, może komuś się przyda.

Na stronie Larrego Ullman’a tutaj przedstawiony jest sposób integracji FCKeditor’a ze stroną. Jest także uwaga:

"Finally, consider that the Views, by default, echo out Model data using the CHtml::encode() method. This is a logical and necessary security feature, as it prevents cross-site scripting attacks (XSS). However, it also makes the FCKEditor-generated HTML completely useless (it’s the equivalent of PHP’s htmlspecialchars() function)."

W skrócie Yii przyjęło metodę wyświetlana danych wyjściowych poprzez funkcję CHtml::encode(), która z jednej strony zabezpiecza przed atakami XSS, ale powoduje że kod wygenerowany przez edytor zawierający tagi html będzie bezużyteczny ponieważ nie będzie parsowany przed wyświetleniem czego objawem na ekranie jest tekst wraz z tagami html. Kupa.

Larry podał metodę której można użyć do aby to poprawić:

"A logical work-around is to use PHP’s strip_tags() instead, providing it with the optional second argument of allowable tags:"




echo strip_tags($model->content, '<p><a><div><ul><ol><li><span>');



No, ok działa ale jak zauważyliście drugim parametrem funkcji jest zestaw tagów html, więc aby wyświetlić np. obrazek to tag <img> musi się tam znaleźć. Ile may tagów -> "dużo". Można co prawda do zmiennej globalnej przypisać tablicę z wymienionymi tagami i do niej się odwoływać.

Stwierdziłem, że to nie dla mnie, więc zrobiłem tak:

  1. W pliku _view.php zamieniłem funkcję:

<?php echo CHtml::encode($data->content); ?>

na


<?php echo CHtml::decode($data->content); ?>

można też


<?php echo strip_tags($data->content, '<p><img><b><br><a><div><ul><ol><li><span>'); ?>

  1. W plikach view.php i admin.php w widgetach "zii.widgets.CDetailView" i "zii.widgets.grid.CGridView" zamieniłem atrybut:

'content'

na


'content:html'

Ta ostatnia zmiana powoduje, że atrybuty będą wyświetlane jako "purified HTML".

Tyle, dział jak trzeba.

Pozdravujem robikon,

dobra praca, veľmi mi to pomohlo, ďakujem