it-swarm.com.de

Wie kann ich innerhalb einer Ajax-JSON-Antwort von PHP doppelte Anführungszeichen in einen String einfügen?

Ich erhalte in einer Ajax-Anfrage eine JSON-Antwort vom Server. So funktioniert es:

{"a": "1", "b": "hallo" kitty ""} 

Es gelang mir jedoch nicht, doppelte Anführungszeichen um kitty zu setzen.

Wenn ich "in\x22 in der Ajax-Antwort konvertiere, wird es immer noch als" von JavaScript interpretiert und ich kann den JSON-Code nicht analysieren.

Soll ich auch das\und das Unescape später entziehen (was möglich wäre)?

Wie macht man das?

Edit: Ich bin mir nicht sicher, ob ich es gut ausdrückt: Ich möchte diese Zeichenfolge in "b" nach der Analyse:

hallo "kitty"

Wenn nötig, könnte ich nach der Analyse auch einen zusätzlichen Schritt hinzufügen, um "b" zu konvertieren, aber ich denke, es ist nicht notwendig.

Edit2: Die Ajax-Seite wird von PHP erzeugt. Ich habe nun mehrere Dinge ausprobiert, um den Wert von b zu erstellen. Alle führen zu einem JSON-Analysefehler auf der Seite:

  $b = 'hello "kitty"';      

  // no 1:
  //$b = str_replace('"',"\x22",$b);

  // or no 2:
  // $b = addslashes($b);  

  // or no 3: 
  $b = str_replace('"','\"',$b);

  echo '{ "a" : "1", "b" : "' . $b . '"}';

Edit3: Diese Lösung funktioniert endlich:

$b = 'hello "kitty"';      
$b = str_replace('"','\\"',$b); 
echo '{ "a" : "1", "b" : "' . $b . '"}';
40
user89021

Entkommen Sie einfach mit einem Backslash:

> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'})
{"a":5,"b":"a \"kitty\" mighty odd"}
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}')
Object
  a: 5
  b: a "kitty" mighty odd
  __proto__: Object

JSON-Parser erkennen \" in doppelten Anführungszeichen als doppelte Anführungszeichen. Beachten Sie, dass im zweiten Beispiel der doppelte Backslash erforderlich ist, da es einen Javascript-Parser-Pass und einen weiteren JSON-Parser-Pass gibt.

56
Max Shawabkeh

verwenden Sie einfach json_encode (ein beliebiges PHP -Element), es wird automatisch analysiert.

2
mahesh

Ein wenig außerhalb des Themas könnten Sie JavaScript/NodeJS auf Ihrem Server und ES6-Vorlagenliterale verwenden (die Backticks `` werden um "Christian" verwendet), aber 7 Jahre später verwenden Sie wahrscheinlich bereits NodeJS :) 

var myJSON = {
    "name": {
        "first": `"Christian"`,
        "last": "Broberg"
    },
    "age": 49,
    "skills": [ "JavaScript", "React", "NodeJS" ],
    "married": false,
    "superpowers": null
}
0