Autor Zpráva
Petík
Profil *
Ahoj,

potřeboval bych poradit ohledně uvozovek v JSON. VYsvětlím můj problém nejlépe na praktické ukázce:
Tady je funkce kterou volam klikem:
function ajax_login(){  
    var login_val=$("#name").val();
    var pass_val=$("#pass").val();
    $("#change").html('<img class="loader" src="./design/images/ajax-loader.gif" alt="loading">'); 
    $.getJSON("./login.php", {login:login_val, pass:pass_val }, function(data){ 
      $("#change").html(data.change);
    }) 
  } 

a zde je zpracování login.php
	public function pLogin()
	{
		$login = $_GET["login"];
		$pass = $_GET["pass"];

		$condit ="((name ='$login')AND(pass ='$pass'))";
		$sql = "
		SELECT name, pass
		FROM users
		WHERE $condit
		";
		
		$result = mysql_query($sql);
		
		if(mysql_num_rows($result) == 1)
		{
			$log = '
			<img class="icon" src="./design/images/unlock.png" alt="login-unlock">         
			<h2>Přihlášení do systému</h2>
			Jste úspěšně přihlášen jako <strong>' .$login .'</strong>';
			echo '({"change": "' .$log .'", "dalsi": "bal bla bla"})';
		}
		else
		{
		  echo '!!! Chybné přihlášení !!! <br>';
		  echo mysql_error();
		}					
	}


Ale at dělám co dělám prohlížeči se nelíbí, že mu tam do toho JSON peru úvozovky. Když použiji jednoduchý text v $log tak vše funguje, ale ať jsem to zuvozovkoval jakkoliv ( /", " ,' ... ) tak se mi nikdy text neukázal. Pls nevíte někdo jak na to ? Jesli neexistuje nějakej trýček ? Četl jsem něco okolo jednoduchejch kulatejch závorkách, že se to má uzavírat, s nima jsem to taky zkoušel ... ale k ničemu jsem se nedoskoušel. Za rady předem moc díky ;-)

Petik
Petík
Profil *
sorry za pravopis ... psáno při nervovým vytížení ;-)
Witiko
Profil
Petík:
Možná escapovat jak závorky tak i backslash?
\\\"

Hádám. Pokud nechceš, abych hádal, hoď nám sem, co login.php navrací při použití uvozovek v čirém textu. :-)
__construct
Profil
Petík:
Skús použiť vstavanú PHP funkciu json_encode()
Petík
Profil *
S tím json_encode:


({"change": ""\r\n\t\t\t<img class=\"icon\" src=\".\/design\/images\/unlock.png\" alt=\"login-unlock\">         \r\n\t\t\t<h2>P\u0159ihl\u00e1\u0161en\u00ed do syst\u00e9mu<\/h2>\r\n\t\t\tJste \u00fasp\u011b\u0161n\u011b p\u0159ihl\u00e1\u0161en jako <strong>petr-klimes<\/strong>"", "dalsi": "bal bla bla"})



jen tak:

({"change": "
			<img class="icon" src="./design/images/unlock.png" alt="login-unlock">         
			<h2>Přihlášení do systému</h2>
			Jste úspěšně přihlášen jako <strong>petr-klimes</strong>", "dalsi": "bal bla bla"})



unslas:

{"change": "
			<img class=/"icon/" src=/".//design//images//unlock.png//" alt=/"login-unlock/">         
			<h2>Přihlášení do systému</h2>
			Jste úspěšně přihlášen jako <strong>petr-klimes</strong>", "dalsi": "bal bla bla"}




Když tam dám jenom <h2>dafdsa</h2> tak to funguje : -> z toho se domnívám, že s lomítkama to problém mít nebude

{"change": "<h2>Přihlášení do systému</h2>", "dalsi": "bal bla bla"}


jsem z toho jelen ;-), btw: nebo špatně používám tu funkci json_encode() ??? Dal jsem tam jenom :

echo '{"change": "' .json_encode($log) .'", "dalsi": "bal bla bla"}';
Chamurappi
Profil
Reaguji na Petíka:
btw: nebo špatně používám tu funkci json_encode() ???
Ano. Je to zjevné z toho, cos předvedl, že vygenerovala. Zkus přemýšlet nebo si přečíst manuál k ní.


Reaguji na Witika:
Možná escapovat jak závorky tak i backslash?
Je zapotřebí escapovat zpětná lomítka, uvozovky a zejména konce řádků — buď je zapsat jako \n, nebo před ně jen strčit zpětné lomítko.
Petík
Profil *
Díky. Sice s json_encode() jsem dobojoval ... ani zaboha to nedělalo co jsem chtěl. Tak jsem to obešel.

udělal sjem si metodu:

public function fJsonVal($txt)
{		
      $old = array('/', '"');
      $new = array('\/', '\"');
      $text = str_replace($old , $new , $txt);
      return $text;							
}



Udělal jsem to na jeden řádek a zde vytvořenou metodu použil:

{
      $log = '<img class="icon" src="./design/images/unlock.png" alt="unlock">';
      $log .= '<h2>Přihlášení do systému</h2>';
      $log .= 'Jste úspěšně přihlášen jako <strong>' .$login .'</strong>';
      echo '{"change": "' .$this->fJsonVal($log) .'", "dalsi": "bal bla bla"}';	
}




Funguje to ;-) a tohle to vyhodí:

{"change": "<img class=\"icon\" src=\".\/design\/images\/unlock.png\" alt=\"unlock\"><h2>Přihlášení do systému<\/h2>Jste úspěšně přihlášen jako <strong>petr-klimes<\/strong>", "dalsi": "bal bla bla"}
Petík
Profil *
Ahoj, nakonec jsem to ještě upravil. Kdyby někdo potřeboval:

                        $MyArr = array ('status'=>$stat,'login'=>$log, 'menu'=>$menu);
			echo json_encode($MyArr);



Když jsem proměný naházel do pole a pak převedl funkcí json_encode, nebyl s tím žádný problém ;-)

GL a HF

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0