खोज…
टिप्पणियों
आपको यह सुनिश्चित करने की आवश्यकता है कि हर बार जब आप UTF-8 स्ट्रिंग को संसाधित करते हैं, तो आप इसे सुरक्षित रूप से करते हैं। यह, दुर्भाग्य से, कठिन हिस्सा है। आप शायद PHP के
mbstringएक्सटेंशन का व्यापक उपयोग करना चाहते हैं।PHP के स्ट्रिंग आपरेशन में निर्मित डिफ़ॉल्ट UTF-8 सुरक्षित द्वारा नहीं हैं। कुछ चीजें हैं जो आप सामान्य पीएचपी स्ट्रिंग ऑपरेशन (जैसे कॉन्टेनेटेशन) के साथ सुरक्षित रूप से कर सकते हैं, लेकिन ज्यादातर चीजों के लिए आपको बराबर
mbstringफ़ंक्शन का उपयोग करना चाहिए।
इनपुट
इससे पहले कि आप इसे संग्रहीत करने या कहीं भी उपयोग करने का प्रयास करें, आपको हर प्राप्त स्ट्रिंग को मान्य UTF-8 के रूप में सत्यापित करना चाहिए। PHP का
mb_check_encoding()चाल करता है, लेकिन आपको इसे लगातार उपयोग करना होगा। इसके आसपास वास्तव में कोई रास्ता नहीं है, क्योंकि दुर्भावनापूर्ण ग्राहक जो भी एन्कोडिंग चाहते हैं उसमें डेटा जमा कर सकते हैं।$string = $_REQUEST['user_comment']; if (!mb_check_encoding($string, 'UTF-8')) { // the string is not UTF-8, so re-encode it. $actualEncoding = mb_detect_encoding($string); $string = mb_convert_encoding($string, 'UTF-8', $actualEncoding); }यदि आप HTML5 का उपयोग कर रहे हैं तो आप इस अंतिम बिंदु को अनदेखा कर सकते हैं। आप चाहते हैं कि आपके द्वारा भेजे गए सभी डेटा यूटीएफ -8 में हों। ऐसा करने का एकमात्र विश्वसनीय तरीका यह है कि आप अपने सभी
<form>टैग जैसे सभी मेंaccept-charsetविशेषता जोड़ें:<form action="somepage.php" accept-charset="UTF-8">
उत्पादन
यदि आपका एप्लिकेशन अन्य सिस्टम में पाठ प्रसारित करता है, तो उन्हें वर्ण एन्कोडिंग के बारे में भी सूचित करना होगा। PHP में, आप
php.iniमेंdefault_charsetविकल्प का उपयोग कर सकते हैं, या स्वयंContent-TypeMIME शीर्षक जारी कर सकते हैं। आधुनिक ब्राउज़रों को लक्षित करते समय यह पसंदीदा तरीका है।header('Content-Type: text/html; charset=utf-8');यदि आप प्रतिक्रिया हेडर सेट करने में असमर्थ हैं, तो आप HTML मेटाडेटा के साथ HTML दस्तावेज़ में एन्कोडिंग भी सेट कर सकते हैं।
एचटीएमएल 5
<meta charset="utf-8">HTML के पुराने संस्करण
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
डेटा संग्रहण और पहुंच
यह विषय विशेष रूप से UTF-8 और डेटाबेस के साथ उपयोग करने के लिए विचार-विमर्श के बारे में बात करता है। यदि आप PHP में डेटाबेस का उपयोग करने के बारे में अधिक जानकारी चाहते हैं तो इस विषय को चेकआउट करें ।
डेटा को MySQL डेटाबेस में संग्रहीत करना:
- अपने डेटाबेस में सभी टेबल और टेक्स्ट कॉलम पर सेट
utf8mb4वर्ण निर्दिष्ट करें। यह MySQL को शारीरिक रूप से स्टोर करता है और UTF-8 में मूल रूप से एन्कोड किए गए मानों को पुनः प्राप्त करता है।यदि कोई
utf8mb4_*कॉलेशन निर्दिष्ट किया गया है (किसी भी स्पष्ट वर्ण के बिना) तो MySQL स्पष्ट रूप सेutf8mb4एन्कोडिंग का उपयोग करेगा। - MySQL के पुराने संस्करण (<5.5.3)
utf8mb4समर्थन नहीं करते हैं, इसलिए आपकोutf8का उपयोग करने के लिए मजबूर किया जाएगा, जो केवल यूनिकोड वर्णों के सबसेट का समर्थन करता है।
MySQL डेटाबेस में डेटा एक्सेस करना:
आपके एप्लिकेशन कोड (जैसे PHP) में, आप जो भी डीबी एक्सेस विधि का उपयोग करते हैं, आपको
utf8mb4को कनेक्शन चारसेट सेट करनाutf8mb4। इस तरह, MySQL अपने मूल UTF-8 से कोई रूपांतरण नहीं करता है जब वह आपके एप्लिकेशन को डेटा बंद कर देता है और इसके विपरीत।कुछ ड्राइवर कनेक्शन वर्ण सेट को कॉन्फ़िगर करने के लिए अपना स्वयं का तंत्र प्रदान करते हैं, जो दोनों अपनी आंतरिक स्थिति को अपडेट करते हैं और कनेक्शन पर उपयोग किए जाने वाले एन्कोडिंग के MySQL को सूचित करते हैं। यह आमतौर पर पसंदीदा तरीका है।
उदाहरण के लिए (
utf8mb4/utf8बारे में समान विचार ऊपर के रूप में लागू होता है):यदि आप PHP, 5.3.6 के साथ PDO अमूर्त परत का उपयोग कर रहे हैं, तो आप DSN में
charsetनिर्दिष्ट कर सकते हैं:$handle = new PDO('mysql:charset=utf8mb4');यदि आप mysqli का उपयोग कर रहे हैं, तो आप
set_charset()को कॉल कर सकते हैं:$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db'); $conn->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($conn, 'utf8mb4'); // procedural styleयदि आप सादे mysql के साथ फंस गए हैं, लेकिन PHP, 5.2.3 चल रहा है, तो आप
mysql_set_charsetकह सकते हैं।$conn = mysql_connect('localhost', 'my_user', 'my_password'); $conn->set_charset('utf8mb4'); // object oriented style mysql_set_charset($conn, 'utf8mb4'); // procedural styleयदि डेटाबेस ड्राइवर कनेक्शन वर्ण सेट करने के लिए अपना स्वयं का तंत्र प्रदान नहीं करता है, तो आपको MySQL को यह बताने के लिए एक क्वेरी जारी करनी पड़ सकती है कि आपका आवेदन कनेक्शन के डेटा को एन्कोडेड होने की उम्मीद करता है:
SET NAMES 'utf8mb4'।