2012-12-29 24 views
10

में अक्षरों वाले वर्ण मेरे पास फ्रांसीसी में कुछ ग्रंथ हैं ("é" जैसे उच्चारण वाले अक्षरों वाले), जो एक MySQL तालिका में संग्रहीत हैं, जिसका संयोजन utf8_unicode_ci (तालिका और कॉलम दोनों) है, जिसे मैं आउटपुट करना चाहता हूं एचटीएमएल 5 पेज।mySQL तालिका

एचटीएमएल पेज वर्णसेट यूटीएफ -8 (< मेटा वर्णसेट = "यूटीएफ -8" />) है और PHP फाइलों को स्वयं "बीओएम के बिना यूटीएफ -8" के रूप में एन्कोड किया गया है (मैं विंडोज़ पर नोटपैड ++ का उपयोग करता हूं)। मैं डेटाबेस का अनुरोध करने और HTML उत्पन्न करने के लिए PHP5 का उपयोग करता हूं।

हालांकि, आउटपुट पेज पर, विशेष वर्ण (जैसे "é") खराब दिखते हैं और उन्हें " " द्वारा प्रतिस्थापित किया जाता है।

जब मैं डेटाबेस ब्राउज़ करता हूं (phpMyAdmin के माध्यम से) वही उच्चारण वाले वर्ण ठीक दिखते हैं।

मुझे यहां क्या याद आ रही है?

(नोट: पृष्ठ एन्कोडिंग (फ़ायरफ़ॉक्स के "वेब डेवलपर" मेनू के माध्यम से) को आईएसओ -885 9 -1 में बदलना समस्या हल करता है ... विशेष रूप से PHP फ़ाइलों में दिखाई देने वाले विशेष वर्णों को छोड़कर, जो अब दूषित हो जाता है। लेकिन वैसे भी, मैं समझता हूं कि यह एटीडीएफ -8 के रूप में काम क्यों नहीं करता है, यह समझने के बिना एन्कोडिंग को बदलने के बजाय क्यों काम करता है। ^^;)

+0

आप php से इसके लिए एक शीर्षलेख भी भेजने का प्रयास कर सकते हैं। –

उत्तर

29

मैंने पहले कि एक ही समस्या का सामना करना है, और मैं क्या किया अनुसरण कर रहे हैं

1) नोटपैड का उपयोग करें ++ (लगभग किसी भी एन्कोडिंग पर अनुकूलित कर सकते हैं) या ग्रहण और यह सुनिश्चित करें करने के लिए बचाने के लिए हो सकता है या UTF-8 में खोलने बीओएम के बिना।

2) पीएचपी शीर्षक में एन्कोडिंग सेट, header('Content-type: text/html; charset=UTF-8');

3 का प्रयोग करके) शुरू और मेरे PHP फ़ाइलों के अंत पर कोई अतिरिक्त स्थान को हटा दें।

4) मेरे सभी टेबल और कॉलम एन्कोडिंग को utf8mb4_general_ci या utf8mb4_unicode_ci पर PhpMyAdmin या आपके किसी भी MySQL क्लाइंट के माध्यम से सेट करें। दो एन्कोडिंग की तुलना में UTF-8 (मैं अपने डेटाबेस कनेक्शन के लिए पीडीओ का उपयोग)

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" 
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8" 

या बस किसी भी डेटा

को लाते समय से पहले एसक्यूएल प्रश्नों पर अमल करने here

5) सेट mysql कनेक्शन चारसेट उपलब्ध हैं

6) एक मेटा टैग <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

7) फ्रेंच के लिए <meta http-equiv="Content-language" content="fr" />

एक निश्चित भाषा कोड का उपयोग करें का उपयोग करें

8) HTML तत्व लैंग इच्छित भाषा के गुण बदल

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 

और इस अधिक अपडेट करने वाले हैं, क्योंकि मैं वास्तव में इस समस्या को हल करने से पहले क्योंकि मैं अपने अतीत परियोजनाओं में जापानी वर्णों के साथ काम कर रहा था बहुत मेहनत करनी पड़ी

9) कुछ फ़ॉन्ट ग्राहक पीसी में उपलब्ध नहीं हैं, तो आप अपने सीएसएस पर इसे शामिल करने Google fonts उपयोग करने की आवश्यकता

10) ?>

साथ अपने PHP स्रोत फ़ाइल खत्म मत करो

नोट:

लेकिन अगर सब कुछ मैंने ऊपर कहा काम नहीं करता है, के आधार पर अपने एन्कोडिंग समायोजित करने का प्रयास चरित्र सेट, तुम सच में प्रदर्शित करना चाहते हैं मेरे लिए मैं प्रदर्शित करने के लिए SHIFT-JIS के लिए सब कुछ सेट सब मेरी जापानी पात्र और यह वास्तव में ठीक काम करता है। लेकिन UFT-8 का उपयोग कर अपने प्राथमिकता

+6

+1, एक सामान्य गलती –

+1

हाँ, 'सेट नाम' शायद उसकी समस्या है। – tftd

+4

वास्तव में 'सेट नाम' गायब था और जोड़ना मेरी समस्या को ठीक करने के लिए पर्याप्त था। चूंकि मैं पीडीओ का उपयोग नहीं करता, इसलिए मुझे निम्नलिखित वाक्यविन्यास का उपयोग करना पड़ा: 'mysql_query (' सेट नाम utf8 '); '। आपके विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद! – s427

2

यदि आपका php.inidefault_charset यूटीएफ -8 पर सेट नहीं है, तो आपको आवश्यकता है अपने डेटा को परिभाषित करने के लिए Content-type का उपयोग करने के लिए। आपकी फ़ाइल (रों) के शीर्ष पर निम्न हैडर लागू करें:

header("Content-type: text/html; charset=utf-8"); 

आप अभी भी एन्कोडिंग के साथ परेशानी पैदा करती है, कारण निम्न में से एक हो सकता है:

  • एक डाटाबेस सर्वर चारसेट समस्या (अपने सर्वर की एन्कोडिंग)
  • एक डेटाबेस ग्राहक चारसेट समस्या (अपने कनेक्शन की एन्कोडिंग की जाँच करें)
  • एक डेटाबेस तालिका चारसेट समस्या (अपनी मेज की एन्कोडिंग की जाँच करें)
  • एक php DEFA जाँच ULT एन्कोडिंग समस्या (जाँच parameters.ini में default_encoding पैरामीटर)
  • एक multibyte missconfigured
  • एक <form> चारसेट समस्या (जाँच है कि यह के रूप में UTF-8 भेज दिया जाता है)
  • एक <html> (parameters.ini में पैरामीटर mb_string देखें) वर्णसेट समस्या (जहां आपकी एचटीएमएल फाइल में कोई एंटी टाइप नहीं है)
  • Content-encoding: समस्या (जहां गलत एन्कोडिंग अपाचे द्वारा भेजी जाती है)।
+0

आपके उत्तर के लिए धन्यवाद। डेटाबेस कनेक्शन के बाद 'SET NAMES 'कमांड जोड़कर समस्या हल हो गई। – s427

14

यह मेरे लिए काम करता

  1. अपने डेटाबेस utf8_general_ci
  2. एन ++ में अपनी फ़ाइलें सहेजें UTF-8 without BOM
  3. अपने PHP फ़ाइल
  4. रखो < meta charset="utf-8" /> में डेटाबेस के लिए कनेक्शन के बाद $mysqli->query('SET NAMES utf8'); रखो के रूप में बनाओ आपके एचटीएमएल -
में

सही काम करता है।

+0

आपके उत्तर के लिए धन्यवाद। यह 'सेट NAME' गायब होने की एक समस्या थी। – s427

+0

उत्कृष्टता पर बीओएम के बिना बचाओ यह काम करता है !!!!!!!!! –

+0

धन्यवाद आदमी !, पहले उत्तर से अधिक संश्लेषित। :) –

1
  1. प्रकार अपने (php) में कुछ पूर्ण फ्रेंच संकेत फाइल
  2. सहेजें है कि आपकी वेबसाइट हैडर में नीचे UTF-8
  3. पेस्ट पंक्ति के रूप में दाखिल होना चाहिए

    header('Content-Type: text/html; charset=utf-8');

पृष्ठ (फ़ाइल) अच्छा दिखना चाहिए।

यदि अच्छा लगता है (SET_NAMES) के बाद mysql व्यवहार के लिए here अच्छा लगता है।

+0

का उपयोग कर अरबी अक्षरों के साथ मुद्दों को हल करें अपने उत्तर के लिए धन्यवाद। समस्या सुलझ गयी। मैं वास्तव में 'सेट NAME' खो रहा था। – s427

2

सेट नाम मेरे लिए काम किया।

मेरा मुद्दा मेरे संपादन पृष्ठों में से एक था, जिसमें विदेशी वर्ण प्रदर्शित नहीं होंगे, उत्पादन वेब पृष्ठों पर कोई समस्या नहीं थी।

1

मुझे पता है कि आपके पास पहले से ही एक जवाब है। एक दम बढ़िया। लेकिन आश्चर्यजनक रूप से इन उत्तरों में से कोई भी मेरे मुद्दे को हल नहीं किया। मैं उन लोगों के लाभ के लिए अपना उत्तर साझा करना चाहता हूं जो एक ही मुद्दे का सामना कर सकते हैं।

मुझे बहुभाषी अनुप्रयोग में फ्रेंच उच्चारण के संबंध में ओपी के समान समस्याएं भी थीं।

लेकिन मुझे पहली बार इस मुद्दे का सामना करना पड़ा जब मुझे AJAX कॉल में सेगमेंट के रूप में (फ्रेंच उच्चारण) डेटा पास करना पड़ा।

हां, हमारे पास यूटीएफ 8 के साथ काम करने के लिए डेटाबेस सेट होना चाहिए। लेकिन तथ्य यह है कि AJAX कॉल में क्वेरी स्ट्रिंग्स थीं (मेरे केस सेगमेंट में, क्योंकि मैं कोडइग्निटर का उपयोग कर रहा हूं), मुझे बस फ्रेंच टेक्स्ट को एन्कोड करना पड़ा।

क्लाइंट-साइड पर ऐसा करने के लिए, अपने डेटा के साथ जावास्क्रिप्ट एन्कोडुरि() फ़ंक्शन का उपयोग करें।

और PHP में इसे उलट करने के लिए, बस urldecode($MyStr) का उपयोग करें जहां डेटा पैरामीटर के रूप में प्राप्त किया गया था।

उम्मीद है कि इससे मदद मिलती है।