[ dzona065 @ 06.03.2007. 11:18 ] @
Za unos i izmjenu teksta koristim RichText editor. Sto se tice unosa, koristim php skript koji sadrzaj toga editora upisuje u bazu podataka. Upisivanje se obavlja sasvim dobro kao i naknadno citanje iz baze. Znaci sve se prikazuje onako kako sam i upisao.

Medjutim nailazim na problem kada hocu da izmjenim tekst koji je napisan.

Editor se iscrtava u sledecem dijelu koda:

<script language="JavaScript" type="text/javascript">
<!--writeRichText(fieldname, html, width, height, buttons, readOnly);-->
writeRichText('rte1', '<?php echo $sadrzaj;?>', 600, 300, true, false);
</script>

Gdje se u promjenljivoj $sadrzaj nalazi tekst koji je (korektno) ucitan iz baze. Prilikom ucitavanja stranice sa ovim editorom, editor uopste nece da se prikaze, tj nece da se iscrta. Kada je vijest kraca iscrta se, a kada je dugacka nece da se pojavi.

Ne znam da li sam dovoljno bio jasan ali sve sto nisam obrazlozio i opisao trazite...
[ Miroslav Ćurčić @ 06.03.2007. 11:28 ] @
Probaj da $sadrzaj prvo propustiš kroz funkciju nl2br.
[ dakipro @ 06.03.2007. 11:28 ] @
Mislim da ti nije problem u duzini texta, vec da negde unutar vesti imas apostrof, pa ti onda javascript pobrljavi. Ili iz vesti obrisi taj apostrof ili ga eskejpuj...
[ Nemanja Avramović @ 06.03.2007. 11:52 ] @
Pogledaj, ako koristiš Firefox, šta kaže JS konzola...
[ dzona065 @ 06.03.2007. 15:50 ] @
koristio sam PHP funkciju addslashes(), pri upisu podataka u bazu, kao i stripslashes() prilikom njihovog prikazivanja. Tako da specijalni znakovi ne bi trebali da prave probleme. U slucaju kraceg texta sve radi kako bi i trebalo, ali kad se edituje neki duzi text (bez obzira na tip texta, cak i plain text) dolazi do pomenutog problema. Da jos jednom napomenem da je text unesen u bazu preko ove skripte, i sasvim dobro se ti podaci prikazuju iz baze. Jedini problem je editovanje texta, jer se vrsi preko inicijalizacije ovog Java objekta. Da li je moguce da je problem u javi?




PS.Ako mozete da predlozite neki drugi jednostavni WYSIWYG text editor, da njega ugradim u aplikaciju, jer mi je rok za isporuku blizu


PS2. Problem je izgleda ipak u specijalim znakovima. Evo sta kaze Error Console Firefoxa (koristio sam i addslashes() i nl2br()):




[Ovu poruku je menjao dzona065 dana 06.03.2007. u 18:14 GMT+1]
[ dakipro @ 06.03.2007. 16:10 ] @
Pa onda uzmi FCKeditor.
A string, bez obzira sto si sklanjao slesheve iz baze, probaj da ih eskejpujes pre samog slanja js kodu jer imas

Code:
writeRichText('rte1', '<?php echo $sadrzaj;?>', 600, 300, true, false);


a ako ti je sadrzaj " Da li 'oces da probas?" onda ce ovaj apostrof da ti zatvori ovaj drugi parametar
Code:
('rte1', '<?php echo $sadrzaj;?>', 600
, i JavaScript (ne java) ce da pukne...
[ Br@nkoR @ 06.03.2007. 19:23 ] @
Citat:
dzona065:
PS2. Problem je izgleda ipak u specijalim znakovima. Evo sta kaze Error Console Firefoxa (koristio sam i addslashes() i nl2br()):

Problem je verovatno nastao usled postojanja novog reda (\n) u tekstu, odnosno (\r\n). Kod upotrebe nl2br funkcije u tekstu je ostao \r i stvara probleme, pokušaj da ukloniš taj karakter npr. sa $sadrzaj = preg_replace('/\r/', '', $sadrzaj);. Ili umesto nl2br koristi npr. $sadrzaj = preg_replace('/\r\n|\n|\r/', '<br />', $sadrzaj);
[ w3bl0rd @ 06.03.2007. 20:46 ] @
možda radiš i dupli addslashes :-D
server je ionako najvjerojatnije podešen da ima magic_quote_runtime uključen pa to može isto da stvara probleme...
[ dzona065 @ 07.03.2007. 00:26 ] @
@Br@nkoR

Hvala puno, to je bilo rjesenje :-)
[ agvozden @ 07.03.2007. 08:31 ] @
rte editor dolazi sa fajlom functions.php
treba pozvati funkciju rteSafe i taj sadrzaj poslati na izlaz...

Code:

function rteSafe($strText) {
    //returns safe code for preloading in the RTE

   $translate = array(
    "đ" => "&#273;",  //    "&#145;" => "&#273;",
    "đ" => "&#1106;", //    "&#209;" => "&#1106;",
    );

  $tmpString = StrTr($strText, $translate);

    //convert all types of single quotes
    $tmpString = str_replace(chr(145), chr(39), $tmpString);
    $tmpString = str_replace(chr(146), chr(39), $tmpString);
    $tmpString = str_replace("'", "&#39;", $tmpString);

    //convert all types of double quotes
    $tmpString = str_replace(chr(147), chr(34), $tmpString);
    $tmpString = str_replace(chr(148), chr(34), $tmpString);

    //replace carriage returns & line feeds
    $tmpString = str_replace(chr(10), " ", $tmpString);
    $tmpString = str_replace(chr(13), " ", $tmpString);

    return $tmpString;
}


Posto tekst koji se unosi ne moze da sadrzi i JS nije zgoreg i njega izbaciti

Code:
$tmpString = preg_replace('@<script[^>]*?>.*?</script>@si', '', $tmpString);


Primeceno je da na nekim browserima ne rade dobro lat i cir slova dj...