2012-07-23 20 views
7

मुझे चरित्र एन्कोडिंग के साथ कोई समस्या नहीं है।डेटाबेस, वर्ण एन्कोडिंग, पीडीएफ और एक्सएमएल

स्थिति

एक फ़ाइल अपलोड होने कि XML में बदल जाती है। इस फ़ाइल का चरित्र एन्कोडिंग भिन्न होता है, हालांकि स्मार्ट कोट्स, इकाइयां और विभिन्न ASCII दिखाई दे सकते हैं। एक बार यह फ़ाइल एक्सएमएल में परिवर्तित हो जाने पर इसे डेटाबेस में संग्रहीत किया जाता है। उपयोगकर्ता अनुरोध पर, एक्सएमएल डेटाबेस से निकाला जा सकता है और एक सरणी में परिवर्तित किया जा सकता है जहां इसे पीडीएफ में बनाया जाता है।

समस्या

अक्षर इनकोडिंग। शुरुआत से ही, चरित्र एन्कोडिंग ने एक बड़ा मुद्दा खेला है। मैं जानना चाहता हूँ;

  • कौन सा चरित्र एन्कोडिंग आम तौर पर पूरे "स्पेक्ट्रम" को कवर करता है। उदाहरण के लिए, ° जो XML या स्मार्ट कोट () को पार्स करते समय अपरिचित है। स्मार्ट कोट ’, इत्यादि में बदल जाएगा।
  • डेटाबेस में XML को कैसे स्टोर करें। एन्क्रिप्शन एक संभावना है, हालांकि डेटाबेस एन्कोडिंग वह जगह है जहां मैं खो रहा हूं।
  • डेटाबेस में सही ढंग से दिखाई देने और सामग्री के सामने Å के साथ इकाइयों, स्मार्ट कोट्स (और अन्य वर्ण जो समस्या पैदा कर सकते हैं) कैसे प्राप्त करें। दूसरे में कुछ अक्षर परिवर्तित - एक काम पर

प्रयास के आसपास

मैं विभिन्न कार्य करता है जो "प्रयास" मेरी समस्या का समाधान करने के लिए बनाया है। हालांकि, मुझे लगता है कि यह पूरी तरह से ऐसा करने का गलत तरीका है और मुझे चरित्र एन्कोडिंग बदलना चाहिए।

/* 
* Converts smart quotes to ascii 
*/ 
function convert_smart_quotes($string) { 
    $string = iconv("UTF-8", "UTF-32", $string); 
    $string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-32'); 
    $string = str_replace('', '', $string); 
    $search = array('‘', '’', '“', '”', '—'); 
    $replace= array("'", "'", '"', '"', '-'); 
    $string = str_replace($search, $replace, $string); 
    return $string; 
} 
/* 
* Converts some entities to an ISO format? 
* 
* Example : ° => ° 
*/ 
function entity_to_iso($string) { 
    return html_entity_decode($string, ENT_QUOTES & ~ENT_COMPAT, 'ISO-8859-1'); 
} 

आखिरकार, मेरी समस्या इस तथ्य में रहती है कि मुझे अपलोड की गई फ़ाइल के एन्कोडिंग को नहीं पता है। मुझे switch का विचार था जो पात्रों को कुछ और डेटाबेस और "पीडीएफ अनुकूल" में बदलने का प्रयास करता है। हालांकि, बहुत से गुगलिंग के परिणामस्वरूप कड़वा काम आसपास या सरणी हुई है जो str_replace एक चीज है। क्या यह वास्तव में समाधान है?

किसी भी सलाह, समाधान या उंगलियों को एक बेहतर दिशा में इंगित किया गया है, सभी सहायक और बहुत सराहना की जाती हैं। धन्यवाद।

+0

हैलो दोस्त, मेरे पास एक समान समस्या है जिसके साथ आप कहीं भी मिलते हैं? – Drakoumel

उत्तर

0

फ़ाइल की एन्कोडिंग का पता लगाना एक मुश्किल समस्या है, यूटीएफ आसान है क्योंकि इसकी शुरुआत में बीओएम है, लेकिन अन्यथा यह एन्कोडिंग प्रकार को सही ढंग से निर्धारित करना लगभग असंभव है।

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

तो आप फ़ाइल के एन्कोडिंग के लिए अपने एक्सएमएल पार्सर से पूछने में सक्षम होना चाहिए, फिर इसे स्टोर करने और/या प्रसंस्करण से पहले इसे यूटीएफ -8 (या 32) में बदलें।

1

यदि मैं आप थे, तो मैं दो चीजों में से एक करूँगा।मैं या तो डेटाबेस में किसी भी एन्कोडिंग के बिना सामान को स्टोर करता हूं (एक ब्लॉब के रूप में) ताकि डेटाबेस एन्कोडिंग इसमें बिल्कुल न आए।

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

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