आप यहां एपीआई मिला रहे हैं, mysql_*
और mysqli_*
मिश्रण नहीं करता। आपको mysqli_
के साथ रहना चाहिए (जैसा कि ऐसा लगता है कि आप वैसे भी हैं), mysql_*
. के रूप में फ़ंक्शंस बहिष्कृत हैं, और पूरी तरह से PHP7 में हटा दिए गए हैं।
आपका वास्तविक मुद्दा कहीं न कहीं एक वर्णसेट समस्या है। यहां कुछ संकेत दिए गए हैं जो आपके आवेदन के लिए सही वर्णसेट प्राप्त करने में आपकी सहायता कर सकते हैं। इसमें अधिकांश शामिल हैं PHP/MySQL एप्लिकेशन को विकसित करते समय सामान्य समस्याओं का सामना करना पड़ सकता है।
- सभी आपके पूरे आवेदन में विशेषताएँ UTF-8 पर सेट होनी चाहिए
- दस्तावेज़ को UTF-8 w/o BOM के रूप में सहेजें (यदि आप Notepad++ का उपयोग कर रहे हैं, तो यह
Format
है ->Convert to UTF-8 w/o BOM
) -
PHP और HTML दोनों में हैडर को UTF-8 पर सेट किया जाना चाहिए
-
एचटीएमएल (अंदर
<head></head>
टैग):<meta charset="UTF-8">
-
PHP (आपकी फ़ाइल के शीर्ष पर, किसी भी आउटपुट से पहले):
header('Content-Type: text/html; charset=utf-8');
-
-
डेटाबेस से कनेक्ट होने पर, अपने कनेक्शन-ऑब्जेक्ट के लिए वर्णसेट को UTF-8 पर सेट करें, इस तरह (सीधे कनेक्ट करने के बाद)
mysqli_set_charset($conn, "utf8"); /* Procedural approach */ $conn->set_charset("utf8"); /* Object-oriented approach */
यह
mysqli_*
. के लिए है ,mysql_*
. के लिए समान हैं और पीडीओ (इस उत्तर के नीचे देखें)। -
यह भी सुनिश्चित करें कि आपका डेटाबेस और टेबल UTF-8 पर सेट हैं, आप इसे इस तरह कर सकते हैं:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
(पहले से संग्रहीत कोई भी डेटा उचित वर्णसेट में परिवर्तित नहीं किया जाएगा, इसलिए आपको इसे एक स्वच्छ डेटाबेस के साथ करने की आवश्यकता होगी, या टूटे हुए वर्ण होने पर ऐसा करने के बाद डेटा को अपडेट करना होगा)।
- अगर आप
json_encode()
का इस्तेमाल कर रहे हैं , आपकोJSON_UNESCAPED_UNICODE
. लागू करने की आवश्यकता हो सकती है ध्वज, अन्यथा यह विशेष वर्णों को उनके हेक्साडेसिमल समकक्ष में बदल देगा।
याद रखें कि सब कुछ आपके कोड की संपूर्ण पाइपलाइन में UFT-8 पर सेट करने की आवश्यकता है, अन्यथा आप अपने एप्लिकेशन में टूटे हुए वर्णों का अनुभव कर सकते हैं।
इस सूची के अतिरिक्त, ऐसे फ़ंक्शन भी हो सकते हैं जिनमें एक वर्णसेट निर्दिष्ट करने के लिए एक विशिष्ट पैरामीटर हो। मैनुअल आपको इसके बारे में बताएगा (एक उदाहरण है htmlspecialchars()
)।
मल्टीबाइट वर्णों के लिए विशेष कार्य भी हैं, उदाहरण:strtolower()
मल्टीबाइट वर्णों को कम नहीं करेगा, इसके लिए आपको mb_strtolower()
का उपयोग करना होगा , यह देखें लाइव डेमो
।
नोट 1 :ध्यान दें कि यह कहीं utf-8
. के रूप में नोट किया गया है (एक डैश के साथ), और कहीं utf8
. के रूप में (इसके बिना)। यह महत्वपूर्ण है कि आप जानते हैं कि कब किसका उपयोग करना है, क्योंकि वे आमतौर पर विनिमेय नहीं होते हैं। उदाहरण के लिए, HTML और PHP utf-8
wants चाहते हैं , लेकिन MySQL नहीं करता है।
नोट 2 :MySQL में, "charset" और "collation" एक ही चीज़ नहीं है, देखें एन्कोडिंग और कोलेशन के बीच अंतर?
. हालांकि दोनों को utf-8 पर सेट किया जाना चाहिए; आम तौर पर संयोजन या तो utf8_general_ci
होना चाहिए या utf8_unicode_ci
, देखें UTF-8:General? बिन? यूनिकोड?
.
नोट 3 :यदि आप इमोजी का उपयोग कर रहे हैं, तो MySQL को utf8mb4
के साथ निर्दिष्ट करना होगा मानक utf8
. के बजाय वर्णसेट , डेटाबेस और कनेक्शन दोनों में। HTML और PHP में बस UTF-8
होगा .
UTF-8 को mysql_
के साथ सेट करना और पीडीओ
-
पीडीओ:यह आपके ऑब्जेक्ट के डीएसएन में किया जाता है।
charset
पर ध्यान दें विशेषता,$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
-
mysql_
:यह बहुत हद तकmysqli_*
. के समान किया जाता है , लेकिन यह कनेक्शन-ऑब्जेक्ट को पहले तर्क के रूप में नहीं लेता है।mysql_set_charset('utf8');