2011-03-26 19 views
22

के बजाय (प्रश्न चिह्न) दिखाते हैं मेरे पास Win7 (x64) पर मानक XAMPP स्थापना है। पिछले प्रोजेक्ट में एन्कोडिंग परेशानियों का मेरा हिस्सा होने के बाद, जहां MySQL एन्कोडिंग php enconding से मेल नहीं खाती है जो बदले में कभी-कभी अन्य एन्कोडिंग में HTML आउटपुट करता है, मैंने utf-8 का उपयोग करके सब कुछ एनकोड करने का निर्णय लिया।यूटीएफ -8 एनकोडेड एचटीएमएल पेज अक्षर

मैं बस एचटीएमएल मार्कअप के साथ शुरू कर रहा हूं और मुझे पहले से ही परेशानी का सामना करना पड़ रहा है।

  • मेरे पेज utf-8 का उपयोग कर सहेजा जाता है (कोई बीओएम, मुझे लगता है कि)
    // अद्यतन: ऐसा लगता है यह मामला नहीं है। फ़ाइल वास्तव में ISO_8859-1 के साथ सहेजी गई थी। बाद में शेरम पेंडलेइस के जवाब के लिए धन्यवाद। मुझे वापस जाना था और वांछित "यूटीएफ -8" में मेरी परियोजना सेटिंग्स (जो "आईएसओ -885 9 -1" पर सेट की गई थी) को बदलना पड़ा। <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • मैं php header('Content-Type:text/html; charset=UTF-8');

इस्तेमाल किया सेट का परीक्षण करने के लिए: AddCharset UTF-8 .php

  • एचटीएमएल एक मेटा टैग निर्दिष्ट करना है:
  • php के साथ utf-8 में .php-पृष्ठों की सेवा करने के लिए .htaccess प्रति सेट किया गया है पृष्ठ को स्पष्ट रूप से यूटीएफ -8 में संरक्षित किया गया है (फ़ायरफ़ॉक्स और क्रोम इसे इस तरह पहचानते हैं) लेकिन é, á या ¡ जैसे किसी भी विशेष वर्ण केवल के रूप में दिखाए जाएंगे। स्रोत कोड देखते समय भी।

    सभी वर्णों के ऊपर वर्णित एन्कोडिंग सेटिंग्स को छोड़कर सही ढंग से प्रस्तुत किया जाता है लेकिन पता लगाया गया एन्कोडिंग ब्राउज़र पर निर्भर करता है windows-1252 या ISO-8859-1 दिखाता है।

    कैसे आते हैं? मैं बहुत परेशान हूँ। मैं सटीक विपरीत व्यवहार की उम्मीद करता।
    कोई सलाह स्वागत है, धन्यवाद!

    संपादित करें: उम्मीद है कि यह थोड़ा और मदद करता है। यदि आपका .php फ़ाइलों के किसी भी जो कुछ पाठ मुद्रण, यह भी सही ढंग से utf-8 में एन्कोडिंग है (के रूप में प्रति फ़ायरबग)

    HTTP/1.1 200 OK 
    Date: Sat, 26 Mar 2011 20:49:44 GMT 
    Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 
    X-Powered-By: PHP/5.3.1 
    Content-Length: 91 
    Keep-Alive: timeout=5, max=99 
    Connection: Keep-Alive 
    Content-Type: text/html; charset=utf-8 
    
  • उत्तर

    17

    जब [छोड़ने] एन्कोडिंग सेटिंग सभी पात्रों ऊपर उल्लेख किया [गाया जाता है] सही ढंग से लेकिन एन्कोडिंग कि शो या तो windows-1252 या ISO-8859-1 का पता चला है ब्राउज़र के आधार पर।

    तब आप वास्तव में भेज रहे हैं। आपकी बुलेट सूची में एन्कोडिंग सेटिंग्स में से कोई भी वास्तव में आपके आउटपुट को किसी भी तरह से संशोधित नहीं करेगा; जो कुछ भी आप करते हैं उसे समझते समय ब्राउज़र को यह बताते हैं कि एन्कोडिंग क्या मानती है। यही कारण है कि आप उन gettings प्राप्त कर रहे हैं - आप ब्राउज़र को बता रहे हैं कि आप जो भेज रहे हैं वह यूटीएफ -8 है, लेकिन यह वास्तव में आईएसओ -885 9 -1 है।

    +4

    बिल्कुल! आप सर्वर को "charset = utf-8" कहने के लिए कह रहे हैं जो वास्तव में मामला नहीं है। सर्वर और ब्राउज़र जीवों पर भरोसा कर रहे हैं। सर्वर जो कुछ भी आपको बताएगा, वह कहेंगे, और ब्राउजर मानता है कि जो भी सर्वर एन्कोडिंग के बारे में कहता है - भले ही यह सच न हो। –

    +2

    जहां तक ​​* जहां * गैर-utf-8 डेटा आ रहा है, वहां आपके द्वारा पोस्ट किए गए कार्यों से बताने का कोई तरीका नहीं है। यदि एक साधारण 'echo ("föö"); "f के रूप में प्रदर्शित होता है, जो यह इंगित कर सकता है कि आपकी .php फ़ाइलों को आईएसओ -885 9 -1 के रूप में सहेजा गया है। यदि डेटा डेटाबेस से प्राप्त किया जा रहा है, तो आप mb_detect_encoding का उपयोग कर सकते हैं () अपने एन्कोडिंग को सत्यापित करने के लिए। –

    +4

    आप जहां सही और असली अपराधी को इंगित करते हैं। धन्यवाद! ऐसा लगता है कि फ़ाइल utf-8 के रूप में सहेजी नहीं गई थी, मुझे इसे उस वातावरण में वापस जाना पड़ा जहां इसे बनाया गया था। वहां, "प्रोजेक्ट" सेटिंग्स "" आईएसओ -885 9 -1 "पर एक विकल्प सेट किया गया था। इस विकल्प को" यूटीएफ -8 "में बदलना और फ़ाइलों को फिर से सहेजना मुझे वांछित परिणाम मिला। 'हेडर();' सेट करने की कोई आवश्यकता नहीं है और न ही अपाचे कॉन्फ़िगरेशन में संशोधन या * .htaccess *। एक मूर्खतापूर्ण गलती, वास्तव में। दोनों कष्टप्रद और संतुष्ट दोनों। आपके उत्तर और टिप्पणियों के लिए शेरम धन्यवाद! – leugim

    6

    चेक प्रतिक्रिया हेडर है।

    +0

    के लिए http://php.net/manual/en/mysqli.set-charset.php देखें अगर मैं सही ढंग से समझ मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन एक साधारण 'गूंज (é);' यह भी कहा कि शापित के रूप में आउटपुट प्रश्न चिन्ह। मैंने हेडर जानकारी के साथ अपना जवाब अपडेट किया। – leugim

    +1

    मैं मामले मतलब है, आप एक आधार php फ़ाइल (UTF-8) है और अच्छी एन्कोडिंग – IProblemFactory

    +0

    आह बिना अपने कुछ अन्य php फ़ाइल में शामिल है! एक सरल गूंज और इन पात्रों युक्त पाठ के साथ कुछ बुनियादी html मार्कअप के साथ एक php: momento पर ठीक यह सबसे सरल मामले संभव है।मैं अभी भी कुछ भी शामिल नहीं कर रहा हूँ। उल्लिखित एन्कोडिंग विकल्पों के अलावा, वह है। – leugim

    1

    मैं ब्राजील से हूं और मैं latin1_spanish_ci का उपयोग करके अपना डेटा बेस बना देता हूं। एचटीएमएल और बाकी सब कुछ के लिए मैं का उपयोग करें:

    charset=ISO-8859-1 
    

    डेटा सही é, ã और ç साथ चला जाता है ... कभी कभी मैं इस तरह के रूप में, यह के कोड का उपयोग कर html के ग्रंथों डाल करने के लिए है:

    Ol&aacute; 
    

    मुझे

    Olá 
    

    देता है आप इस पृष्ठ में कोड पा सकते हैं: http://www.ascii.cl/htmlcodes.htm

    आशा है कि इससे मदद मिलती है। मुझे याद है कि यह वास्तव में कष्टप्रद था।

    +0

    आपके उत्तर के लिए धन्यवाद! मैं पात्रों को एन्कोड न करने का कोई तरीका ढूंढना चाहता हूं। मैंने यूटीएफ -8 का उपयोग करने के बारे में सोचा क्योंकि मैंने पढ़ा है कि इसमें सभी संभावित पात्र शामिल हैं ... मैं इस मुद्दे को आईएसओ -885 9 पर स्विच करके हल कर सकता हूं लेकिन इसके बजाय कुछ हल्का शेड करना चाहता हूं। – leugim

    +0

    सबसे सरल विन्यास के साथ शुरू हो सकता है लेकिन एचटीएमएल के साथ अपने पात्रों से बचने शुरू नहीं करते हैं। – tetris

    1

    समस्या वह वर्ण है जिसका उपयोग पृष्ठों की सेवा के लिए अपाचे द्वारा किया जा रहा है। मैं लिनक्स के साथ काम करता हूं, इसलिए मुझे XAMPP के बारे में कुछ भी पता नहीं है। मुझे भी वही समस्या थी, मैंने समस्या को हल करने के लिए क्या किया था, charset कॉन्फ़िगरेशन फ़ाइल में वर्णमाला को जोड़ना था (इसे डिफ़ॉल्ट रूप से टिप्पणी की जाती है)।

    मेरे मामले में मेरे पास /etc/apache2/conf.d/charset है, लेकिन चूंकि आप विंडोज का उपयोग कर रहे हैं तो स्थान अलग है। तो मैं आपको इसे हल करने के बारे में एक विचार के रूप में दे रहा हूं।

    अंत में, मेरी चारसेट कॉन्फ़िग फ़ाइल इस तरह है:

    # Read the documentation before enabling AddDefaultCharset. 
    # In general, it is only a good idea if you know that all your files 
    # have this encoding. It will override any encoding given in the files 
    # in meta http-equiv or xml encoding tags. 
    
    AddDefaultCharset UTF-8 
    

    मुझे आशा है कि यह मदद करता है।

    +0

    को कैसे सही किया जाए, उसने पहले से ही ऐसा किया - यह उपरोक्त बुलेट सूची में दूसरा आइटम है। और यह वैसे भी मदद नहीं करेगा; यदि आप जो भेज रहे हैं वह आईएसओ -885 9 -1 है, तो HTTP हेडर में "charset = utf-8" निर्दिष्ट करना केवल ब्राउज़र को भ्रमित करने में काम करता है, जिससे यह उन display को प्रदर्शित करता है। –

    2

    लगता है कोई भी नहीं की तरह

    SET NAMES utf8; 
    

    मैं इस समाधान here पाया उल्लेख किया है और यह मेरे में मदद की। यह आवेदन कैसे करें:

    सभी UTF-8 होना करने के लिए, निम्नलिखित बयान के तुरंत बाद आप डेटाबेस सर्वर से कनेक्शन कर दिया है जारी: सेट नाम UTF8;

    शायद यह किसी की मदद करेगा।

    +0

    कृपया यह भी देखें: ["सेट नाम" का उपयोग करना है] (http://stackoverflow.com/questions/1650591/whether-to-use-set-names) – hakre

    +0

    जानकारी के लिए धन्यवाद और देर से उत्तर के लिए खेद है। मैंने हमेशा mysql_set_charset() का उपयोग किया था, लेकिन एक प्रोजेक्ट था जिसे मुझे समायोजन करना पड़ा था, और किसी कारण से यह फ़ंक्शन काम नहीं करता था। मैंने अपनी अन्य मशीनों पर कई अन्य तरीकों (यहां तक ​​कि httpd.conf और php.ini भी संशोधित) की कोशिश की लेकिन केवल 'सेट नाम utf8' ने मेरी मदद की। बीटीडब्ल्यू, mysql_set_charset() का उपयोग अब निराश है: http://php.net/manual/en/function.mysql-set-charset.php – Vitalius

    +0

    हां यह MySQL और PHP संस्करणों पर निर्भर करता है, इसलिए यह कभी भी आगे नहीं था यह आज है। सौभाग्य से चीजों में सुधार हुआ। – hakre

    3

    पीडीओ बताओ अपने charset शुरू में .... कुछ

    तरह
    PDO("mysql:host=$host;dbname=$DB_name;charset=utf8;", $username, $password); 
    

    नोटिस: charset=utf8; हिस्सा।

    उम्मीद है कि यह मदद करता है!

    9

    मेरे मामले में, डेटाबेस latin1 लौट आए, जब मेरे ब्राउज़र की उम्मीद utf8

    तो MySQLi के लिए मैंने किया:

    mysqli_set_charset($dblink, "utf8");  
    

    अधिक जानकारी

    +0

    आपका आदमी, आखिरकार मेरे लिए काम किया। धन्यवाद भाई! –

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