2011-09-18 13 views
19

के लिए डबल कोट्स से बचें मैं एक PHP सरणी से JSON स्ट्रिंग बना रहा हूं। मैंने इसे json_encode() का उपयोग करके एन्कोड किया है।PHP JSON स्ट्रिंग, जेएस आउटपुट

$data = array(
    'title' => 'Example string\'s with "special" characters' 
); 

$data = json_encode($data); 

$datawp_localize_script() का उपयोग कर स्थानीय और एक वैश्विक data चर के माध्यम से सुलभ है।

जे एस फ़ाइल में मैं का पालन करते हुए जानकारी का उपयोग कर सकते हैं:

var data  = data.replace(/"/g, '"'), 
    jsonData = jQuery.parseJSON(data); 

console.log(jsonData); 

इस का उत्पादन में परिणाम है:

{ "title":"Example string's with "special" characters" } 

प्रवेश कि http://jsonlint.com/ में परिणाम एक त्रुटि देता है। "विशेष" के चारों ओर डबल कोट्स को हटाने से स्ट्रिंग को मान्य किया जाता है।

PHP से JSON स्ट्रिंग बनाने और जेएस फ़ाइल में उपयोग के लिए इसे ठीक से बचने का सबसे अच्छा तरीका क्या है?

उत्तर

8

http://www.php.net/manual/en/function.json-encode.php#100565

कहा से, "उद्धरण अमान्य JSON का उत्पादन करेगा, लेकिन यह केवल एक मुद्दा आप json_encode() उपयोग कर रहे हैं और सिर्फ पीएचपी जादुई आपके उद्धरण से बचने के लिए उम्मीद है। आप क्या करने की जरूरत । अपने आप को बचने

+30

तो आप json_encode को वैध जेसन बनाने की उम्मीद नहीं कर सकते? मैं इस डेवलपर को किराए पर नहीं लेता –

+7

@ जॉटी आपको PHP के लिए नया होना चाहिए: पी –

+5

यह उत्तर, हालांकि स्वीकृत के रूप में चिह्नित है, सवाल का जवाब नहीं देता है। ओपी पूछता है: PHP से JSON स्ट्रिंग बनाने का सर्वोत्तम तरीका क्या है और जेएस फ़ाइल में उपयोग के लिए इसे ठीक से बचें?यह जवाब कहता है कि आपको खुद से बचने की जरूरत है लेकिन ऐसा करने का सबसे अच्छा तरीका नहीं है। – Alex

18

एक और तरीका है htmlspecialchars का उपयोग कर उद्धरण एन्कोड करने के लिए होगा:

$json_array = array(
    'title' => 'Example string\'s with "special" characters' 
); 

$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8'); 
+11

क्या यह '' '' '"' – colllin

+1

एम – WonderLand

+0

के लिए काम नहीं कर रहा है, अच्छा टिप, यह 'डेटा-एट्रिब्यूट (एचटीएमएल 5) के साथ अच्छा काम करता है :) धन्यवाद! +1 –

13

json_encode का उपयोग करें ($ json_array, JSON_HEX_QUOT); 5.3 php के बाद से: डिफ़ॉल्ट रूप से

$json = str_replace("\u0022","\\\\\"",json_encode($phpArray,JSON_HEX_QUOT)); 

json_encode()\" को " बच जाएंगे: http://php.net/manual/en/json.constants.php

+0

मैं अपना खुद का जेसन प्रारूपित कर रहा हूं केवल "{\" कुंजी \ ":"। json_encode ($ value)। "}" जैसे मान को जोड़ना, जहां $ मान उद्धरण के साथ एक स्ट्रिंग है। यह मेरे लिए काम करने वाला सबसे आसान समाधान था। JSON.parse (x) इस मामले में पूरी तरह से काम करता है – Alex

15

मैं succefully सिर्फ ऐसा किया। लेकिन यह अभी भी json.PARSE() के लिए गलत JSON है। तो विकल्प JSON_HEX_QUOT जोड़कर, json_encode()"\u0022 के साथ प्रतिस्थापित करेगा। json.PARSE() अभी भी \u0022 पसंद नहीं करेंगे। तो हमें \\" के साथ \u0022 को प्रतिस्थापित करने की आवश्यकता है। \\\\\"\\" से बच निकला है।

नोट: यदि आपके पास जावास्क्रिप्ट सिंगल कोट समस्या है तो आप यूनिकोड HEX मान के साथ सिंगल कोट को प्रतिस्थापित करने के लिए विकल्प JSON_HEX_APOS जोड़ सकते हैं।

पूर्व: json_encode($phpArray, JSON_HEX_APOS|JSON_HEX_QUOT));

+0

यह मेरे लिए काम किया धन्यवाद – West55

+3

पीएचपी: $ encodedData = json_encode ($ phpArray, JSON_HEX_APOS | JSON_HEX_QUOT); जे एस:।।। JSON.parse (' '); बिल्कुल सही। – pirs

+0

हाँ !!! यह सिर्फ एक चाल है :) मेरे दिन को बचाने के लिए धन्यवाद :) –

1

मैं सिर्फ इस समस्या का सामना किया है और वास्तविक मुद्दा यह है कि मैं वास्तविक JSON डेटा बाहर थूकना से पहले एक उचित आवेदन/json हैडर जोड़ने के लिए भूल गया था।

header('Content-Type: application/json'); 
संबंधित मुद्दे