2012-02-15 13 views
6

मुझे mysql डेटाबेस में विशेष वर्ण और प्रतीकों को स्टोर करने की आवश्यकता है। तो या तो मैं इसे स्टोर कर सकता हूं क्योंकि यह 'ü' जैसा है या इसे '& uuml' जैसे HTML कोड में परिवर्तित कर सकता है;क्या मुझे डेटाबेस में डेटा संग्रहीत करते समय HTML इकाइयों का उपयोग करने की आवश्यकता है?

मुझे यकीन नहीं है कि कौन सा बेहतर होगा।

इसके अलावा मेरे पास '♥', '' 'जैसे प्रतीक हैं।

कृपया सुझाव दें कि कौन सा बेहतर है? यह भी सुझाव दें कि कोई वैकल्पिक विधि है या नहीं।

धन्यवाद।

+0

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

+1

यह उस वर्णमाला पर निर्भर करता है जहां कॉलम उस HTML का उपयोग कर रहा है जहां आप HTML संग्रहीत करते हैं। आम तौर पर आपको एक वर्णमाला का उपयोग करना चाहिए जिसमें सभी वर्ण शामिल हैं (इसलिए कोई भी "विशेष" नहीं है) और आपका डेटा सामान्यीकृत रूप में संग्रहीत किया जा सकता है और इसमें नंगे वर्णमाला एन्कोडिंग के बगल में कोई विशेष एन्कोडिंग नहीं है जो डेटाबेस में प्रत्येक टेक्स्ट-फ़ील्ड में है वैसे भी। – hakre

+0

@ पेक्का यह ठीक है। अगर यह इस तरह से मददगार है, तो मुझे आपको धन्यवाद देना चाहिए। –

उत्तर

5

एचटीएमएल इकाइयों को तार पर चरित्र जानकारी परिवहन के लिए कई साल पहले पेश किया गया था जब परिवहन बाइनरी सुरक्षित नहीं था और मामले के लिए उपयोगकर्ता-एजेंट (ब्राउज़र) ने परिवहन-परत या सर्वर के वर्णसेट एन्कोडिंग का समर्थन नहीं किया था।

एक HTML इकाई केवल मूलभूत वर्ण (&, ;, a-z और 0-9) और उन वर्ण हैं के रूप में सबसे अधिक वर्ण सेट में एक ही द्विआधारी कूटबन्धन है, यह है और उन दुष्प्रभाव से बहुत सुरक्षित था।

हालांकि जब आप डेटाबेस में कुछ संग्रहीत करते हैं, तो आपके पास इन मुद्दों का कोई कारण नहीं है क्योंकि आप आमतौर पर नियंत्रण में हैं और आप जानते हैं कि आप डेटाबेस में टेक्स्ट को कैसे और कैसे स्टोर कर सकते हैं।

उदाहरण के लिए, यदि आप डेटाबेस के अंदर यूनिकोड को टेक्स्ट के लिए अनुमति देते हैं, तो आप सभी पात्रों को स्टोर कर सकते हैं, कोई भी वास्तव में विशेष नहीं है। ध्यान दें कि आपको यहां अपना डेटाबेस जानने की जरूरत है, कुछ तकनीकी विवरण हैं जिन्हें आप चला सकते हैं। जैसे कि आप अपने डेटाबेस कनेक्शन के लिए वर्णसेट एन्कोडिंग नहीं जानते हैं, इसलिए आप अपने डेटाबेस को बिल्कुल बता नहीं सकते कि आप कौन सा टेक्स्ट स्टोर करना चाहते हैं। लेकिन आम तौर पर, आप बस पाठ को स्टोर करते हैं और इसे बाद में पुनर्प्राप्त करते हैं। निपटने के लिए कुछ खास नहीं है।

  • HTML निकाय और अधिक स्थान की खपत:: ü लैटिन -1 में ü से बहुत बड़ा है, UTF-8, UTF-16

    जब आप सादा चरित्र की बजाय HTML संस्थाओं का उपयोग वास्तव में वहाँ कमियां हैं या यूटीएफ -32।

  • एचटीएमएल इकाइयों को आगे की प्रक्रिया की आवश्यकता है। उन्हें बनाने की जरूरत है, और जब पढ़ा जाता है, तो उन्हें पार्स करने की आवश्यकता होती है। कल्पना करें कि आपको अपने डेटाबेस में एक विशिष्ट पाठ की खोज करने की आवश्यकता है, या किसी अन्य कार्रवाई को अतिरिक्त हैंडलिंग की आवश्यकता होगी। यह सिर्फ ऊपर की ओर है।

असली मजा शुरू होता है जब आप दोनों अवधारणाओं को मिश्रण करते हैं। आप ऐसे स्थान पर आते हैं जहां आप वास्तव में नहीं जाना चाहते हैं। तो बस ऐसा मत करो क्योंकि आपको इसकी आवश्यकता नहीं है।

+0

यह 5 साल का है लेकिन मैं पिछले पैराग्राफ में उल्लिखित "असली मस्ती" को गवाही देना चाहता हूं। हमारे पास एक MySQL डेटाबेस है जिसमें बहुत सारी सारणीयां हैं जिनमें 'लैटिन 1' वाले फ़ील्ड हैं और 'utf-8' collations वाले फ़ील्ड हैं। हमने डेटाबेस में विशेष वर्ण (ज्यादातर पंजीकृत और व्यापार चिह्न) और एचटीएमएल इकाइयों (और कुछ मामलों में डबल-एन्कोडेड एचटीएमएल इकाइयों, यानी & reg; ') दोनों संग्रहित किए हैं। लड़के और लड़कियां, इस सड़क पर मत जाओ। अपने डेटाबेस में वर्णों को स्टोर करने और इसके साथ चिपकने के तरीके पर स्मार्ट निर्णय लें। जब आप डेटा खींचते हैं, तो फिर भी आपको इसकी आवश्यकता हो सकती है। – DerProgrammer

5

डेटाबेस में अपने डेटा को कच्चे छोड़ दें। इनके लिए HTML इकाइयों का उपयोग न करें जब तक आपको HTML के लिए उनकी आवश्यकता न हो। आप कभी भी नहीं जानते कि आप कहीं और अपने डेटा का उपयोग किसी वेब पेज पर नहीं करना चाहते हैं।

+1

+1, लेकिन HTML को आउटपुट करते समय 'htmlentities' भी आवश्यक नहीं है - एक' htmlspecialchars() 'XSS को रोकने के लिए करेगा। 'htmlentities' को * ठीक से कॉन्फ़िगर किए गए वातावरण में कभी भी आवश्यक नहीं होना चाहिए –

+1

@ पेक्का, मैं फ़ंक्शन का उपयोग करने का सुझाव नहीं दे रहा था, मैं स्वयं इकाइयों का जिक्र कर रहा था। हां, 'htmlspecialchars() 'वास्तव में डेटा को आउटपुट करने के लिए पसंदीदा तरीका है। – Brad

1

मेरा सुझाव अन्य योगदानकर्ताओं को दर्पण करेगा, विशेष डेटाबेस को अपने डेटाबेस में सहेजते समय परिवर्तित न करें।

रूपांतरण के खिलाफ कुछ कारणों:

  • K.I.S.S principle (मेरा सबसे बड़ा कारण यह करने के लिए नहीं)
  • सबसे संस्थाओं लेने वाली और अधिक स्थान की तो परिवर्तित किया जा रहा
  • ढीली की क्षमता के लिए करने से पहले खत्म हो जाएगा एक शब्द में ü इकाइयों की खोज करें, [word]+ü+[/word] होगी, और आपको ü =>[word]+ü+[/word] के HTML समकक्ष की स्ट्रिंग तुलना करना होगा।
  • आपका आउटपुट एचटीएमएल से मोबाइल के लिए एक एपीआई कहने के लिए बदल सकता है, जो रूपांतरण को बहुत अनावश्यक बनाता है।
  • डेटा के इनपुट, और आउटपुट पर कनवर्ट करने की आवश्यकता है (फिर यदि आपका आउटपुट सादे HTML से कुछ और में बदल जाता है)।
संबंधित मुद्दे

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