WordPress और डेटाबेस एक्सपोर्ट: हिंदी की जगह भाषा

माइग्रेशन, अपडेट या डेटाबेस एक्सपोर्ट के बाद आपके पोस्ट में भाषा की जगह अचानक भाषा दिखता है? डेटा लगभग हमेशा मौजूद रहता है, बस गलत एन्कोडिंग से पढ़ा जा रहा होता है। Mojibuster एक्सपोर्ट ठीक करता है; फिर आप डेटाबेस में असली वजह सुधारते हैं।

टेक्स्ट और ये फ़ाइलें चलती हैं:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

जैसे Excel एक्सपोर्ट, डेटाबेस डंप, सबटाइटल या वेबसाइट का कोड।

ठीक करें

  1. फ़ाइल खींचकर लाएँ या टेक्स्ट पेस्ट करें
  2. अपने-आप ठीक हो जाता है
  3. कॉपी या डाउनलोड करें
या फ़ाइल यहाँ खींचकर लाएँ
  • कोई अपलोड नहीं। फ़ाइलें आपके ब्राउज़र में ही ठीक होती हैं और आपके डिवाइस से बाहर नहीं जातीं।

  • सर्वर EU में। Mojibuster फ़िनलैंड (EU) के एक सर्वर पर चलता है, इसलिए यूरोप का सामान्य डेटा संरक्षण विनियमन (GDPR) लागू होता है। GDPR पढ़ें (EUR-Lex, अंग्रेज़ी)

समस्या कैसी दिखती है

सर्वर बदलने के बाद SQL डंप की एक पंक्ति

पहले

INSERT INTO wp_posts (post_title) VALUES ('हिंदी भाषा और नाम');

बाद में

INSERT INTO wp_posts (post_title) VALUES ('हिंदी भाषा और नाम');

यह कहाँ से आता है

WordPress टेक्स्ट UTF-8 में रखता है। पर कई पुरानी साइटों में टेबल latin1 में बने थे या कनेक्शन latin1 से जुड़ता था। जब तक लिखने और पढ़ने में एक ही गलती हो, किसी को पता नहीं चलता। नए सर्वर पर जाने, phpMyAdmin से एक्सपोर्ट करने या कनेक्शन का charset बदलने पर हर हिंदी अक्षर अचानक कई अजीब चिह्नों में बदल जाता है।

  • wp-config.php में DB_CHARSET का मान latin1 है या टेबल से मेल नहीं खाता।
  • डंप latin1 में एक्सपोर्ट हुआ और utf8mb4 में इम्पोर्ट हुआ, या उल्टा।
  • किसी प्लगइन या इम्पोर्ट स्क्रिप्ट ने पहले से बिगड़े टेक्स्ट को एक बार और बदल दिया। इससे दो बार बिगड़ा टेक्स्ट बनता है, जैसे à ¤­।

एक्सपोर्ट ठीक करें

  1. कुछ भी बदलने से पहले डेटाबेस का बैकअप लें।
  2. प्रभावित टेबल .sql फ़ाइल में एक्सपोर्ट करें, जैसे phpMyAdmin से या mysqldump --default-character-set=utf8mb4 से।
  3. फ़ाइल को ऊपर के बॉक्स में डालें। Mojibuster सिर्फ़ बिगड़ी जगहें ठीक करता है और हर बदलाव दिखाता है।
  4. ठीक की गई फ़ाइल डाउनलोड करें और उसे utf8mb4 के साथ नए टेस्ट डेटाबेस में इम्पोर्ट करें।
  5. साइट जाँचें। सब सही दिखे तो असली डेटाबेस में इम्पोर्ट करें।

डंप कभी अपलोड नहीं होता। यह ज़रूरी है, क्योंकि उसमें अक्सर यूज़र खाते, ईमेल पते और कमेंट होते हैं। इस बारे में और कानूनी जानकारी में।

serialized डेटा से सावधान

WordPress कुछ सेटिंग wp_options और wp_postmeta में serialized PHP मान की तरह रखता है, जैसे s:12:"भाषा";। संख्या बाइट में लंबाई है (देवनागरी का हर अक्षर 3 बाइट लेता है)। जब टेक्स्ट की लंबाई बदलती है, तो संख्या मेल नहीं खाती और WordPress वह मान छोड़ देता है। इसलिए पहले wp_posts, wp_comments और wp_terms जैसी सामग्री वाली टेबल ठीक करें। options के लिए WP-CLI का wp search-replace बेहतर है, क्योंकि वह लंबाई भी अपडेट करता है।

MySQL में असली वजह ठीक करें

  • टेबल और कनेक्शन utf8mb4 पर ले जाएँ और wp-config.php में define('DB_CHARSET', 'utf8mb4'); रखें।
  • अगर latin1 कॉलम में UTF-8 बाइट पड़े हैं, तो उसे सीधे न बदलें, वरना टेक्स्ट दोबारा एन्कोड हो जाएगा। आम रास्ता बाइनरी टाइप से है: पहले MODIFY … LONGBLOB, फिर MODIFY … LONGTEXT CHARACTER SET utf8mb4।
  • हर बदलाव पहले डेटाबेस की कॉपी पर आज़माएँ।

अक्सर पूछे जाने वाले सवाल

क्या पूरा WordPress डेटाबेस एक साथ ठीक हो सकता है?

हाँ, बड़े SQL डंप भी। पर wp_options और wp_postmeta के serialized डेटा का ध्यान रखें; वहाँ WP-CLI बेहतर है।

क्या डंप के सही अक्षर बदल जाएँगे?

नहीं। Mojibuster सिर्फ़ वही क्रम ठीक करता है जो साफ़ तौर पर बिगड़े हैं। सही टेक्स्ट जैसा है वैसा रहता है।

utf8 और utf8mb4 में क्या अंतर है?

MySQL में utf8 सिर्फ़ तीन बाइट तक के अक्षर रखता है, इसलिए इमोजी खो जाते हैं। utf8mb4 असली UTF-8 है और WordPress के लिए सही चुनाव।

क्या यह WordPress के अलावा दूसरे सिस्टम पर भी चलता है?

हाँ। Joomla, Drupal, Magento या MySQL/MariaDB पर आपका अपना ऐप, सबमें यही समस्या और यही हल है।

और गाइड