2010-05-20 16 views
7

का उपयोग करते समय काम नहीं कर रहा है मैंने हाल ही में अपने कुछ पृष्ठों को AJAX के माध्यम से प्रदर्शित करने के लिए बदल दिया है और मुझे कुछ भ्रम है कि क्यों utf8 एन्कोडिंग एक बॉक्स के अंदर एक प्रश्न चिह्न प्रदर्शित कर रहा है, जबकि इससे पहले कि यह ' टी।UTF8 एन्कोडिंग AJAX

पहला उदाहरण। ऑरिंगल पेज index.php था। वर्णमाला स्पष्ट रूप से utf8 पर सेट किया गया था और <head> में है। मैं तो डेटाबेस क्वेरी करने के लिए php इस्तेमाल किया

यहाँ मूल index.php पृष्ठ है:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>Title here</title> 
</head> 
<body class='body_bgcolor' > 

<div id="main_container"> 
    <?php 
     Data displayed via php was simply a select statement that output the HTML. 
    ?> 
</div> 

हालांकि, जब मैं एक मेनू है कि ajax सभी UTF8 के माध्यम से "main_container" आबादी को जोड़ने के लिए परिवर्तन किया एन्कोडिंग काम करना बंद कर दिया। यहाँ नए कोड है:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     <title>Title here</title> 
    </head> 
    <body class='body_bgcolor' > 
<a href="#" onclick="display_html('about_us');"> About Us </a> 

    <div id="main_container"></div> 

"display_html()" समारोह जावास्क्रिप्ट पेज जो एक php पृष्ठ के अंदर संग्रहित एचटीएमएल पुनः प्राप्त करने के jQuery ajax कॉल का उपयोग करता है कहता है, तो "का एक आईडी के साथ div अंदर एचटीएमएल स्थानों main_container "। मैं jquery में charset को utf8 के रूप में सेट कर रहा हूं जैसे:

$.ajax({ 
     async: false, 
     type: "GET", 
     url: url, 
     contentType: "charset=utf-8", 
     success: function(data) 
      { 
       $("#main_container").html(data); 
      } 
}); 

मैं क्या गलत कर रहा हूं?

+0

रखा मुझे लगता है कि एक ** बीओएम ** बाइट आदेश मार्क समस्या है http://www.google.it/search?hl=it&q= + बाइट + ऑर्डर + मार्क + (बीओएम) और एक = एफ और एकीआई = और एक्यूएल = और ओक = और जीएस_आरएफई = –

उत्तर

6

एन्कोडिंग मेटा टैग और सामग्री प्रकार निर्दिष्ट करने से अधिक है - फ़ाइलों को वास्तव में आपके द्वारा निर्दिष्ट एन्कोडिंग में होना चाहिए, या आपको mojibake मिल जाएगा।

जांचें कि सब कुछ यूटीएफ -8, आपके डेटाबेस, डेटाबेस कनेक्शन, तालिका कॉलम का उपयोग कर रहा है। जांचें कि आपके द्वारा समेत किसी भी स्थिर फाइल को यूटीएफ -8 में भी एन्कोड किया गया है।

+0

ठीक है, मैंने अपनी सभी फाइलें बदल दी हैं जिनमें एएनएसआई से यूटीएफ -8 शामिल हैं। मैंने डेटाबेस को देखा, लेकिन यकीन नहीं कि मैं सही जगह पर देख रहा हूं। कॉलम "COLLATION" के अंतर्गत कहते हैं "लैटिन 1_swedish_ci" यह सुनिश्चित नहीं है कि इसका क्या अर्थ है। मैं और कैसे जांच सकता हूं कि डीबी टेबल/कॉलम utf-8 है या नहीं? इसके अलावा, मैंने सभी फ़ाइलों को utf-8 में सहेजने के बाद अब मुझे एक त्रुटि मिली है, "सत्र कैश लिमिटर नहीं भेज सकता है - हेडर पहले ही भेजे गए हैं" लेकिन मैंने फ़ाइल को utf-8 के रूप में सहेजने के अलावा कोई भी कोड नहीं बदला और इससे पहले कि मैंने यह सब किया, यह सुनिश्चित नहीं किया कि क्या हो रहा है। आपकी मदद के लिए धन्यवाद – Ronedog

+0

अन्य टिप्पणियों की तरह कह रहे हैं, यह बाइट ऑर्डर मार्क के साथ करना है। अन्य पोस्टरों के अन्य लिंक देखें, और http://forum.mamboserver.com/showthread.php?t=42814 – mdma

+0

ठीक है, मैंने उन सभी अन्य पोस्ट पढ़ ली हैं। असल में वे कह रहे हैं कि ' 'टैग के बाद या तो एक स्पेस या नया लाइन कैरेक्टर है। मैं अपने सभी कोड से गुजर चुका हूं और सभी शामिल हैं और अभी भी एक ही परिणाम प्राप्त करते हैं। मैंने index.php पेज से कोड के हर बिट को भी हटा दिया है, इसलिए ऐसा लगता है: ' '... पहले या बाद में कहीं भी कोई स्थान नहीं ... अन्य फ़ाइलों में शामिल नहीं है जो इसे प्रभावित कर सकता है जब मैं पृष्ठ को फिर से लोड करता हूं, तो मुझे एक ही त्रुटि संदेश मिलता है। हालांकि, मैंने index.php पृष्ठ को एएनएसआई के रूप में सहेजने का निर्णय लिया, और त्रुटि चली गई, लेकिन एन्कोडिंग कोई अच्छा नहीं था ??? – Ronedog

1

आप

"display_html()" फ़ंक्शन को कॉल जावास्क्रिप्ट पृष्ठ एचटीएमएल एक php पृष्ठ के अंदर संग्रहित पुनः प्राप्त करने के jQuery ajax कॉल का उपयोग करता लिखा

क्या करें आपका मतलब है "एक PHP पृष्ठ के अंदर संग्रहीत एचटीएमएल"? यदि आप डेटा लोड करना चाहते हैं और वहां <div> के रूप में प्रदर्शित करना चाहते हैं तो लोड किए गए डेटा को संवाददाता बनाया जाना चाहिए। मेरा मतलब है कि यह वास्तविक HTML कोड का कोड होना चाहिए। इसके अलावा 'कंटेंट टाइप' के साथ 'डेटा टाइप' को "एचटीएमएल" या "टेक्स्ट" के रूप में निर्दिष्ट करना एक अच्छा विचार होगा। यदि आप कुछ भी कल्पना नहीं करते हैं तो jQuery का अंतिम संस्करण जवाब के एमआईएमई प्रकार के आधार पर "समझदारी से परिणाम प्राप्त करने का प्रयास करेगा"। यदि आप 'डेटा टाइप' जानते हैं, तो वहां निर्दिष्ट करना बेहतर होगा। और यदि आप AJAX उपयोग का उपयोग डिफ़ॉल्ट 'async: true' और 'false' नहीं करते हैं।

आपको यह भी सत्यापित करना चाहिए कि jQuery.load विधि (http://api.jquery.com/load/ देखें) आपके लिए सबसे अच्छा विकल्प है। यदि आवश्यक हो तो आप गणित के साथ एक पूर्ण HTML पृष्ठ लोड कर सकते हैं और वहां केवल एक हिस्सा प्रदर्शित कर सकते हैं: $('#main_container').load('ajax/about_us.html #container');

और यूटीएफ -8 एन्कोडिंग के बारे में फ़ाइल वास्तव में यूटीएफ -8 एन्कोडेड को सहेजना न भूलें। अपने संपादक के संबंधित विकल्प का उपयोग करें (नोटपैड में "सेव करें" चुनें और फिर "यूटीएफ -8" एन्कोडिंग के रूप में चुनें और "एएनएसआई" नहीं)।

+0

संपादक सेटिंग की याद दिलाने के लिए अच्छी बात है। – Timo

0

सुनिश्चित करें कि आपकी सभी फ़ाइलें यूटीएफ -8 (या यूटीएफ -8 डब्लू.ओ. बीओएम) के रूप में सहेजी गई हैं।

यदि आपने उन्हें एफ़टीपी या वेब टूल से अपलोड किया है, तो जांचें कि वे अभी भी यूटीएफ -8 हैं या नहीं।

0

न समाधान के अपने मामले में काम किया जब तक मैं

header('Content-type: text/html; charset=utf-8'); 
संबंधित मुद्दे