2013-11-15 13 views
11

पर काम नहीं कर रहा है मेरे पास एक PHP कोड है जिसे डीएस टेबल डेटा को जेसन में एन्कोड करने की आवश्यकता है। तो मैंने json_encode() का उपयोग किया।php json_encode आंशिक रूप से

मैं टेबल यहाँ दी का उपयोग करें - http://www.geekality.net/2011/08/21/country-names-continent-names-and-iso-3166-codes-for-mysql/

इस कोड के behavious विभिन्न आदानों के लिए अलग हो रहा है।

क्वेरी - $query = "SELECT * FROM countries "; कोई भी जेसन मान वापस नहीं करता है।

क्वेरी - $query = "SELECT * FROM countries where continent_code='AS'"; जेसन मूल्य सही ढंग से देता है।

जबकि $query = "SELECT * FROM countries where continent_code='EU'"; कुछ भी वापस नहीं करता है।

इसी प्रकार 'एनए', 'एएफ' काम नहीं करता और अन्य सही काम करते हैं।

मैं PHP के json_encode के इस व्यवहार के अजीब हूँ।

यह मेरा कोड है।

<?php 
$con=mysqli_connect('localhost','xxxx','xxxxx','joomla30'); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

$result = mysqli_query($con,"SELECT * FROM countries where continent_code='EU'") or die (mysqli_error($con)); 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 
     $orders[] = array(
      'CountryCode' => $row['code'], 
      'CountryName' => $row['name'] 
     ); 
    } 
//print_r($orders); 

echo json_encode($orders); 

mysqli_close($con); 
?> 

json_encode की पिछली पंक्ति तक, डेटा ले जाया जाता है। तो मुझे लगता है कि इसकी जेसन एन्कोड समस्या है।

मैंने print_r($orders); का उपयोग करके इसके बारे में जानने की कोशिश की।
मुझे इससे निम्नलिखित आउटपुट मिला।

यदि मैं 'ईयू' के लिए प्रयास करता हूं, तो मुझे यह सरणी मिलती है।

Array ([0] => Array ([CountryCode] => AD [CountryName] => Andorra) 
[1] => Array ([CountryCode] => AL [CountryName] => Albania) 
[2] => Array ([CountryCode] => AT [CountryName] => Austria) 
[3] => Array ([CountryCode] => AX [CountryName] => Åland Islands)... 

यदि मैं 'एएस' के लिए प्रयास करता हूं, तो मुझे यह सरणी मिलती है।

Array ([0] => Array ([CountryCode] => AE [CountryName] => United Arab Emirates) 
[1] => Array ([CountryCode] => AF [CountryName] => Afghanistan) 
[2] => Array ([CountryCode] => AM [CountryName] => Armenia) 
[3] => Array ([CountryCode] => AZ [CountryName] => Azerbaijan)... 

दोनों सरणियों एक जैसे सही लग रहा है ... लेकिन Json_encode 'यूरोपीय संघ' के लिए 'के रूप में' पर ही काम करता है और नहीं।

क्या कोई इस समस्या को हल करने के बारे में जानता है? यदि हां, तो कृपया मुझे बताएं ..

+1

मुझे लगता है कि समस्या "आलैंड द्वीप" है क्योंकि json_encode को "अ" के साथ एक अजीब यूनिकोड होने में समस्या है। ('UTF8' $ चोर,) UTF-8 में अपने mysql_connection की स्थापना –

उत्तर

24

आपको यह सुनिश्चित करना चाहिए कि आपके वेब एप्लिकेशन का प्रत्येक घटक यूटीएफ -8 का उपयोग करता है। This answer किसी अन्य प्रश्न से आपको यह बताना होगा कि यह कैसे करें। यदि आप RFC4627 से read this:

एन्कोडिंग: JSON टेक्स्ट यूनिकोड में एन्कोड किया जाएगा। डिफ़ॉल्ट एन्कोडिंग यूटीएफ -8 है।

json_encode फ़ंक्शन सभी आने वाले डेटा को यूटीएफ -8 एन्कोडेड होने की आवश्यकता है। यही कारण है कि Åland Islands जैसे तार शायद आपको समस्याएं पैदा कर रहे हैं।

+4

2 मिनट के भीतर अपनी त्वरित प्रतिक्रिया के लिए धन्यवाद का प्रयास करें .. मैं 'जोड़ा mysqli_set_charset;' यह सही काम किया ... – vsriram92

13

बस एक यादृच्छिक अनुमान: json_encode आपको यूटीएफ -8 एन्कोडेड होने के लिए आवश्यक सभी डेटा की आवश्यकता है और यह अन्यथा विफल हो जाएगा। ये देश जहां यह विफल रहता है, आपके पास संभवतः डेटा होता है जिसमें गैर-ASCII वर्ण होते हैं। शुद्ध ASCII यूटीएफ -8, गैर-ASCII वर्णों के साथ संगत होने के लिए आपको विशेष देखभाल करने की आवश्यकता होती है। अपने डेटाबेस से यूटीएफ -8 एन्कोडेड डेटा कैसे प्राप्त करें (mysqli_set_charset का उपयोग करें) के लिए UTF-8 all the way through देखें।

+5

आप .. धन्यवाद मैं जोड़ा गया 'mysqli_set_charset ($ con,' utf8 '); ' यह सही काम करता है ... – vsriram92

+0

धन्यवाद, मैंने अभी निम्नलिखित कोड' $ db-> set_charset (" utf8 ") जोड़ा है; 'मेरे तैयार कथन में और पूरी तरह से काम करते हैं –

संबंधित मुद्दे