Gå til innhold

Hjelp, PHP og JSON problemer med apostrof i verdi


Anbefalte innlegg

Skrevet

Noen som ser hvordan feilen kan løses? Jeg regner med dere ser intensjonen til koden...

 

 

$arrData = array ("foo" =>	"bar's");

$strData = json_encode($arrData);
?>

<script>
 
 
 try{
 	var data = eval(   '(' +  '<?php echo $strData; ?>' +  ')' );
 	
 	alert(data.foo);
 }
    catch (e){
        alert('JSON Error: ' + e.toString());
    }

 

</script>

 

 

Jeg får parse feil på eval utrykket med Bar's som verdi. Noen som vet hvordan jeg kan kommer over dette? Dette er bare et forenklet tilfelle, men skal egentlig bygge opp dette fra en database, slik at "foo" => "{$dbRes[$i]}".

Videoannonse
Annonse
Gjest Slettet+142
Skrevet

Jeg ser virkelig ikke hva intensjonen i denne koden er, men jeg prøver;

 

$arrData = array ("foo" => "bar's");

$strData = add_slashes( json_encode($arrData) );
?>

<script>


try{
 var data = eval(   '(' +  '<?php echo $strData; ?>' +  ')' );

 alert(data.foo);
}
   catch (e){
       alert('JSON Error: ' + e.toString());
   }



</script>

 

La til addslashes()..

Skrevet
Jeg ser virkelig ikke hva intensjonen i denne koden er, men jeg prøver;

 

$arrData = array ("foo" => "bar's");

$strData = add_slashes( json_encode($arrData) );
?>

<script>


try{
 var data = eval(   '(' +  '<?php echo $strData; ?>' +  ')' );

 alert(data.foo);
}
   catch (e){
       alert('JSON Error: ' + e.toString());
   }



</script>

 

La til addslashes()..

9091061[/snapback]

 

 

addslashes fungere ikke dessverre, har prøvd...

 

intensjonen er at det skal komme en alertbox med teksten : bar's

 

 

 

 

endrer jeg til "foo" => "bars" altså uten apostrof fungerer dette...

 

Noen med JSON erfaring som vet hvordan jeg escaper/encoder quotes for at dette skal fungere?

Gjest Slettet+142
Skrevet (endret)

$arrData = array ("foo" => "bar's");

$strData = json_encode($arrData);

$strData = str_replace("'", "\'", $strData);
?>

<script>


try{
var data = eval(   '(' +  '<?php echo $strData; ?>' +  ')' );

alert(data.foo);
}
  catch (e){
      alert('JSON Error: ' + e.toString());
  }



</script>

 

La til addslashes().

 

Den skal da vel virke? :p

Endret av Slettet+142
Skrevet

Jeg har aldri brukt JSON, men har vært litt borti javascript. Tror cluet her er at du må escape ' to ganger. Første gangen for å få den inn i evalen og enda en gang for å få den inn i koden du eksekverer inni evalen, det kommer litt an på hvordan uttrykket faktisk ser ut. Du burde printe det fullstendige uttrykket som står inni evalen til skjermen din, og putte det inn i et hardkodet script med x-antall \ foran.

 

Jeg prøvde meg litt fram her: http://www.w3schools.com/jsref/tryit.asp?f...e=tryjsref_eval og alerten funker med både \\' og \\\' inni alerten, som igjen ligger inni evalen.

 

Eller du kan bruke hurtigmetoden, krysse fingre og tær og prøve med en dobbel add_slashes:

 

$strData = add_slashes(add_slashes(json_encode($arrData)));

Gjest Slettet+142
Skrevet (endret)

Da jeg testet koden lokalt fant jeg ut at koden jeg skrev i forrige innlegg skulle virke. Jeg prøvde da også med dobbel escaping, men det virket ikke.

 

En annen ting er at, skal man escape med addslashes(), kan man ikke bruke addslashes() på JSON return strengen, men man må escape verdiene i arrayet.

 

Ellers vil man jo også (dobbelt) escape "-ene som JSON lager.. Eller noe sånt :p

Endret av Slettet+142

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...