2009-09-28 5 views
13

मेरे पास एक HTML फॉर्म है, और कुछ उपयोगकर्ता एमएस वर्ड से टेक्स्ट कॉपी/पेस्ट कर रहे हैं।HTML फॉर्म में सबमिट किए जाने पर उद्धरण मजाकिया वर्णों में क्यों बदलते हैं?

'एक € Â ™ और एक ¢ Â € Â ™

डेटाबेस स्तंभ मिलान utf8_general_ci है: एकल उद्धरण या डबल कोट्स देखते हैं, वे की तरह अजीब पात्रों में अनुवाद मिलता है।

मैं उचित वर्ण दिखाने के लिए कैसे प्राप्त करूं?

संपादित करें: समस्या हल हो गई। यहां बताया गया है कि मैंने इसे कैसे ठीक किया:

डेटाबेस से जोड़ने/पुनः प्राप्त करने से पहले mysql_query("SET NAMES 'utf8'"); रन। (नीचे डोनाल की टिप्पणी के लिए धन्यवाद)।

और कुछ हद तक विषम, PHP प्रदर्शन urlencode($text) प्रदर्शित होने पर लागू किया गया था, ताकि इसे हटा दिया जाना था।

मैंने यह भी सुनिश्चित किया कि पृष्ठ के लिए शीर्षलेख और AJAX अनुरोध/प्रतिक्रिया सभी utf8 थे।

+4

एमएस वर्ड "स्मार्ट कोट्स" में उद्धरण बदलता है, जो कि स्मार्ट के अलावा कुछ भी है। वे यूनिकोड के बजाय एक माइक्रोसॉफ्ट "कोड पेज" का उपयोग करते हैं। –

+0

आप इसे कुछ हाइफ़न के साथ भी देखेंगे। – Buggabill

+1

यदि सभी एन्कोडिंग सही तरीके से निर्दिष्ट हैं, तो इन्हें स्वचालित रूप से उनके यूनिकोड समकक्ष में परिवर्तित किया जाना चाहिए। मुझे संदेह है कि समस्या शब्द के लिए विशिष्ट है; टाइपिंग का प्रयास करें उदा। Alt + 130 (é) सीधे, और देखें कि यह साफ़ रूप से आता है या नहीं। – Thomas

उत्तर

21

यह यूनिकोड (UTF-8 सबसे अधिक संभावना) वर्ण iso-8859-1 के रूप में व्याख्या की जा रही का एक क्लासिक मामले की तरह दिखता है। वहां दो जगहें हैं जहां पात्र दूषित हो सकते हैं। सबसे पहले, ग्राहक के ब्राउज़र को डेटा भेजना पड़ता है। यह डेटा को दूषित कर सकता है अगर यह वर्णों को पृष्ठ के वर्ण एन्कोडिंग में सही रूप से परिवर्तित नहीं कर सकता है। फिर सर्वर डेटा पढ़ता है और बाइट्स को वर्णों में डीकोड करता है। यदि क्लाइंट और सर्वर एन्कोडिंग के बारे में असहमत हैं तो वर्ण दूषित हो जाएंगे। फिर डेटा डेटाबेस में संग्रहीत किया जाता है; फिर भ्रष्टाचार की संभावना है। अंत में, जब पृष्ठ पर डेटा लिखा जाता है (ब्राउज़र पर प्रदर्शित करने के लिए) ब्राउज़र बाइट्स को गलत तरीके से व्याख्या कर सकता है यदि पृष्ठ पर्याप्त रूप से इसके एन्कोडिंग को इंगित नहीं करता है।

आपको यह सुनिश्चित करने की ज़रूरत है कि आप पूरे यूटीएफ -8 का उपयोग कर रहे हैं। वेब पृष्ठों के लिए डिफ़ॉल्ट iso-8859-1 है, इसलिए अपने वेब पृष्ठों Content-Type हैडर या मेटा टैग

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

(सुनिश्चित करें कि आप वास्तव में उस एन्कोडिंग में पाठ की सेवा कर रहे हैं) के साथ पेश की जानी चाहिए।

प्रक्रिया के सभी हिस्सों के साथ यूटीएफ -8 का उपयोग करके आप सभी काम कर रहे वेब ब्राउज़र और डेटाबेस के साथ समस्याओं से बचेंगे।

+1

+1, इन समस्याओं के लिए कोई भी स्थानीय फिक्स नहीं है, महत्वपूर्ण बात यह है कि जहां भी आप टेक्स्ट ट्रांसमिट या स्टोर कर रहे हों, एन्कोडिंग-जागरूक होने की मानसिकता है। –

+0

हां मैं @ user8599 से सहमत हूं .... – omega

5

पृष्ठ का उपयोग करने वाले एन्कोडिंग की जांच करें। साथ ही UTF-8 का उपयोग कर इसे सांकेतिक शब्दों में बदलना है, और एक मेटा टैग एन्कोडिंग का वर्णन जोड़ें:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
4

हम एक PHP समारोह स्मार्ट उद्धरणों के साथ गंदगी साफ़ करने की कोशिश करता है। यह एक गड़बड़ है, क्योंकि यह प्रोटोटाइप विकास के दौरान पॉप अप के रूप में थोड़ा व्यवस्थित हो गया है। यह कुछ मदद की, हालांकि हो सकता है:

function convert_smart_quotes($string) { 
    $search = array(chr(0xe2) . chr(0x80) . chr(0x98), 
        chr(0xe2) . chr(0x80) . chr(0x99), 
        chr(0xe2) . chr(0x80) . chr(0x9c), 
        chr(0xe2) . chr(0x80) . chr(0x9d), 
        chr(0xe2) . chr(0x80) . chr(0x93), 
        chr(0xe2) . chr(0x80) . chr(0x94), 
        chr(226) . chr(128) . chr(153), 
        '’','“','â€<9d>','â€"',' '); 

    $replace = array("'","'",'"','"',' - ',' - ',"'","'",'"','"',' - ',' '); 

    return str_replace($search, $replace, $string); 
} 
+4

मैंने इसे स्वयं किया है, लेकिन मुझे लगता है कि यह एक बुरा विचार है। यदि आपके पास टेक्स्ट प्रक्रिया या कोई अन्य प्रकार की प्रक्रिया है जो आपके डेटा को दूषित करती है, तो प्रक्रिया को ठीक करें ताकि यह डेटा को दूषित न करे, न केवल आउटपुट में टुकड़े टुकड़े में सुधार करें। –

+0

हां - आधे दशक बाद। मैं इस पर ठोकर खाई क्योंकि मैं मौजूदा कोड बनाए रख रहा था। मैं वर्ड जैसे कार्यक्रमों से कट/पेस्ट मुद्दों के बारे में जानता था, लेकिन उस पर @ माइक-बैक बैक अप लेने के लिए, कभी-कभी आप जानकारी के स्रोत को नियंत्रित नहीं कर सकते हैं, और आपको अपनी डेटा स्ट्रीम में सामान्यीकरण दृष्टिकोण लेना होगा। मैंने इसका इस्तेमाल किया, और एक और ¢ (पहले स्तर की गोलियां जो मेरे पास थी) के लिए एक और जोड़ा। –

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