[ nezki @ 06.11.2008. 11:42 ] @
Imam puno problema sa jednom glupavom sitnicom. Evo da cu primer jedne php stranice u kojoj cete videti u cemu je problem.
Kada se klikne na link greska on mi izbaci Error: unterminated string literal.
Kako da se resim ovoga?

Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <script language="JavaScript">
    function onerror(msg, URL, lineNum) {
          var errWind = window.open("","errors","HEIGHT=270,WIDTH=400")
          var wintxt = "<HTML><BODY BGCOLOR=RED>"
          wintxt += "<B>An error has occurred on this page.  Please report it to Tech Support.</B>"
          wintxt += "<FORM METHOD=POST ACTION=mailTo:[email protected]>"
          wintxt += "<TEXTAREA COLS=45 ROWS=8 WRAP=VIRTUAL>"
          wintxt += "Error: " + msg + "\n"
          wintxt += "URL: " + URL + "\n"
          wintxt += "Line: " + lineNum + "\n"
          wintxt += "Client: " + navigator.userAgent + "\n"
          wintxt += "-----------------------------------------\n"
          wintxt += "Please describe what you were doing when the error occurred:"
          wintxt += "</TEXTAREA><P>"
          wintxt += "<INPUT TYPE=SUBMIT VALUE='Send Error Report'>"
          wintxt += "<INPUT TYPE=button VALUE='Close' onClick='self.close()'>"
          wintxt += "</FORM></BODY></HTML>"
          errWind.document.write(wintxt)
          errWind.document.close()
          return true
    }
</script>
  <title></title>
  </head>
  <body>
  <?php 
  $tekst="errt\nĆŽĆŽĐŠĐš676666361223232132n"; 
  ?>
  <a href='#' onClick="window.alert('<?php echo $tekst;?>')">greska</a>
  </body>
[ Miroslav Ćurčić @ 06.11.2008. 11:55 ] @
U promenljivoj $text ti smeta ono "\n" jer dobijaš renderovan JS gde se string lomi u dva reda a to ne sme.

Probaj sa staviš "\\n" i stavi dupli navodnik umesto jednostruki.
[ nezki @ 06.11.2008. 12:34 ] @
Znam ja kako da to resim iz php-a
ali ova promenjiva $text se prihvata iz forme, alink se nalazi u smarty tepmlate-u. Mene interesuje da li u Java Scriptu postoji neka funkcija koju bi koristio da izbegnem ovu gresku. Tipa window.open(naziv_funkcije(<?php echo $text; ?>))
[ Miroslav Ćurčić @ 06.11.2008. 12:43 ] @
Običan str_replace bi trebalo da uradi posao, probaj ovo:

window.open(naziv_funkcije("<?php echo str_replace("\n", '\n', $text); ?>"))

mada ima i JS funkciju "replace".
[ nezki @ 06.11.2008. 13:39 ] @
:)
Ne izbacuje gresku samo kada je u tekstu \n vec i niz drugih specijalnih karaktera, zatio nisam hteo da ispravljam gresku sa str_replace, verujem da ima neko lepse resenje u JS
[ Aleksandar Ružičić @ 06.11.2008. 15:59 ] @
umesto:
Code:

  <a href='#' onClick="window.alert('<?php echo $tekst;?>')">greska</a>

pisi:
Code:

  <a href='#' onClick="window.alert('<?php echo addslashes($tekst);?>')">greska</a>


to bi trebalo da ti resi problem...
[ nezki @ 06.11.2008. 16:12 ] @
E sada kako da pozvovem addslashes funkciju u smartiju?
Ja sam napravio tu funkciju u java scriptu, ali kada je upotrebim da je mi istu gresku
[ nezki @ 06.11.2008. 17:15 ] @
Evo kako izgledaju te funkcije u JS- u koje sam ja koristio ali ne ide,
Code:

    function addslashes(str) {
      str=str.replace(/\'/g,'\\\'');
      str=str.replace(/\"/g,'\\"');
      str=str.replace(/\\/g,'\\\\');
      str=str.replace(/\0/g,'\\0');
      return str;
    }
    
    function stripslashes(str) {
      str=str.replace(/\\'/g,'\'');
      str=str.replace(/\\"/g,'"');
      str=str.replace(/\\\\/g,'\\');
      str=str.replace(/\\0/g,'\0');
      return str;
    } 
[ Man-Wolf @ 07.11.2008. 02:57 ] @
Code:

function addslashes(str){return(str+'').replace(/([\\"'])/g,"\\$1").replace(/\0/g,"\\0");}


Odmah da napomenem, nisam ovo ja pisao, nego sam pre nekog vremena trazio "zamenu" za neku PHP-ovu funkciju u JS-u i naleteo sam na neki projekat ciji je cilj da sve PHP funkcije prevede u JS.

Vise informacija na ovoj adresi: http://kevin.vanzonneveld.net/techblog/article/phpjs_licensing/
[ nezki @ 07.11.2008. 06:14 ] @
Ova tvoja funkcija ima error. negde ti fali ' ili " ili \.
Ja nisam uspeo da provalim gde.
[ nezki @ 07.11.2008. 06:25 ] @
Evo samo da vam demonstriram da ne radi nijedna od ovih funkcija addslashes, takodje ni kada koristim addslashesfunkciju iz php opet imam istu gresku. Stvarno ne znam da li postoji uopste resenje za ovo. Samo kliknite na linkove i videcete da opet javlja gresku.
Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <script language="JavaScript">
    function onerror(msg, URL, lineNum) {
          var errWind = window.open("","errors","HEIGHT=270,WIDTH=400")
          var wintxt = "<HTML><BODY BGCOLOR=RED>"
          wintxt += "<B>An error has occurred on this page.  Please report it to Tech Support.</B>"
          wintxt += "<FORM METHOD=POST ACTION=mailTo:[email protected]>"
          wintxt += "<TEXTAREA COLS=45 ROWS=8 WRAP=VIRTUAL>"
          wintxt += "Error: " + msg + "\n"
          wintxt += "URL: " + URL + "\n"
          wintxt += "Line: " + lineNum + "\n"
          wintxt += "Client: " + navigator.userAgent + "\n"
          wintxt += "-----------------------------------------\n"
          wintxt += "Please describe what you were doing when the error occurred:"
          wintxt += "</TEXTAREA><P>"
          wintxt += "<INPUT TYPE=SUBMIT VALUE='Send Error Report'>"
          wintxt += "<INPUT TYPE=button VALUE='Close' onClick='self.close()'>"
          wintxt += "</FORM></BODY></HTML>"
          errWind.document.write(wintxt)
          errWind.document.close()
          return true
    }
    function addslashes1(str){
    return(str+'').replace(/([\\"'])/g,"\\$1").replace(/\0/g,"\\0");
    }
    
    function addslashes(str) {
      str=str.replace(/\'/g,'\\\'');
      str=str.replace(/\"/g,'\\"');
      str=str.replace(/\\/g,'\\\\');
      str=str.replace(/\0/g,'\\0');
      return str;
    }
    
</script>
  <title></title>
  </head>
  <body>
  <?php 
  $tekst="errt\nĆŽĆŽĐŠĐš676666361223232132n";
  $tekst2=addslashes("errt\nĆŽĆŽĐŠĐš676666361223232132n");  
  ?>
  <a href='#' onClick="window.alert(addslashes1('<?php echo $tekst;?>'))">greska kada koristim addslashes1 funkciju iz JS</a><br />
  <a href='#' onClick="window.alert(addslashes('<?php echo $tekst;?>'))">greska kada koristim addslashes funkciju iz JS</a><br />
  <a href='#' onClick="window.alert('<?php echo $tekst2;?>')">greska kada koristim addslashes funkciju iz PHP</a><br />
  </body>
</html>
[ dakipro @ 07.11.2008. 07:33 ] @
Ne znam zasto ti ovo sad ne radi u js, ali znam da smarty ima addslashes po defaultu: {$promenjiva|addslashes}.
Svejedno, pogledaj source ove stranice, ja za sve primere dobijem
Code:

onclick="alert('errt
CŽCŽÐŠÐš676666361223232132n')"

sto ce reci da je ispostovan \n, tj html je napravio novi red na kraju. Ja sam za ovakve stvari koristio custom php funckiju nl2br2, koja zameni \n sa <br /> ali ne doda novu liniju kao sto to genericka nl2br funkcija cini.
Ako pak stavis
Code:

  $tekst2=addslashes('errt\nCŽCŽÐŠÐš676666361223232132n'); 

znaci sa jednostrukim navodnicima, php nece ispostovati \n, ali ce se to ipak pokazati u alertu i dobices alert('errt\nCŽCŽÐŠÐš676666361223232132n') koji ce da radi, tako da mislim da ce ti neka vrsta modifikovane nl2br u phpu zavrsiti posao. Ima na php forumu i primer toga, potrazi, obican str_replace mislim da je.
[ nezki @ 07.11.2008. 09:27 ] @
Da li mi verujete da jos nisam uspeo da resim problem :(
Zato sam odlucio da sada sve opisem ovde:
Ovako ja imam jedan template u Smartiju u kome izmedju ostalog imam i linkove
Code:

{section name=list loop=$list}
<a href="#" onClick='alert( "{$list[list].opis|addslashes}");return false;'>Pogledaj opis</a><br />
{/section}

Kada se klikne na jedan od linkova iskoci alert u kome pise opis, a opis se iscita iz baze i prosledi Smarty template-u.
Opis se u bazu unosi iz CMS-a iz jednog textarea polja
Query za unos opisa ide ovako:
Code:

$opis= htmlspecialchars($_POST['opis'], ENT_QUOTES);
$query = "UPDATE tabela SET opis='".$opis."' WHERE id=$id ";

U php.ini je magic_quotes_gpc = Off
Provalio sam da kada god prilikom unosa opisa, tj kucanja teksta u textarea polju u CMS-u udarim enter i takav opis unesem u bazu ili ako upotrebim navodnike u tekstu opisa, posle kada na sajtu kliknem na link da pogledam opis on mi izbacuje onu glupu gresku Error: unterminated string literal

Molim vas pomozite mi poludecu vise od ove gluposti.
[ Aleksandar Ružičić @ 07.11.2008. 14:36 ] @
kad upisujes u bazu, ukoliko ti je magic quotes iskljucen obavezno provuci string kroz addslashes, a kad stampas to iz baze onda koristi addcslashes($text, "\\\"\n\r'") to bi trebalo da ti resi problem