2009-07-29 18 views
43

का उपयोग करके यूनिकोड स्ट्रिंग (हिंदी) को संग्रहीत और प्रदर्शित करना मुझे एक MySQL डेटाबेस में हिंदी टेक्स्ट संग्रहीत करना है, इसे PHP स्क्रिप्ट का उपयोग करके इसे वेबपृष्ठ पर प्रदर्शित करना है। मैंने निम्नलिखित किया:PHP और MySQL

मैंने डेटाबेस बनाया और यूटीएफ -8 में अपनी एन्कोडिंग सेट की और utf8_bin पर भी कॉलेशन सेट किया। मैंने तालिका में एक वर्चर फ़ील्ड जोड़ा और इसे चार्टसेट प्रॉपर्टी में यूटीएफ -8 टेक्स्ट स्वीकार करने के लिए सेट किया।

फिर मैंने इसमें डेटा जोड़ने के बारे में सेट किया। यहां मुझे existing site से डेटा कॉपी करना पड़ा। हिंदी पाठ इस तरह दिखता है: सूर्योदय: 05: 30

मैंने सीधे इस पाठ को अपने डेटाबेस में कॉपी किया और डेटा प्रदर्शित करने के लिए PHP कोड echo(utf8_encode($string)) का उपयोग किया। ऐसा करने पर ब्राउज़र ने मुझे "??????" दिखाया।

जब मैंने ब्राउजर में "स्रोत देखें" पर जाकर टेक्स्ट के यूटीएफ समकक्ष को सम्मिलित किया, हालांकि, सूर्योदय सूर्योदय में अनुवाद करता है।

यदि मैं डेटाबेस में सूर्योदय दर्ज और स्टोर करता हूं, तो यह पूरी तरह से परिवर्तित हो जाता है।

तो मैं क्या जानना चाहता हूं कि मैं सीधे अपने डेटाबेस में सूर्योदय को कैसे स्टोर कर सकता हूं और इसे प्राप्त कर सकता हूं और इसे PHP का उपयोग करके अपने वेबपृष्ठ में प्रदर्शित कर सकता हूं।

इसके अलावा, क्या कोई मुझे समझने में मदद कर सकता है कि कोई स्क्रिप्ट है जो जब मैं सूर्योदय में टाइप करता हूं, तो मुझे सूर्योदय देता है?

समाधान मिले

मैं निम्न नमूना स्क्रिप्ट जो मेरे लिए काम किया लिखा था। आशा है कि यह भी किसी और में मदद करता है

<html> 
    <head> 
    <title>Hindi</title></head> 
    <body> 
    <?php 
     include("connection.php"); //simple connection setting 
     $result = mysql_query("SET NAMES utf8"); //the main trick 
     $cmd = "select * from hindi"; 
     $result = mysql_query($cmd); 
     while ($myrow = mysql_fetch_row($result)) 
     { 
      echo ($myrow[0]); 
     } 
    ?> 
    </body> 
</html> 

डंप मेरी डेटाबेस हिंदी utf तार भंडारण के लिए

CREATE TABLE `hindi` (
    `data` varchar(1000) character set utf8 collate utf8_bin default NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `hindi` VALUES ('सूर्योदय'); 

अब मेरे सवाल है, यह कैसे "मेटा" निर्दिष्ट किए बिना काम किया या जानकारी शीर्षक है?

धन्यवाद!

उत्तर

33

क्या आपने HTML हेड सेक्शन में उचित वर्णसेट सेट किया था?

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 

या आप का उपयोग कर अपने PHP स्क्रिप्ट में सामग्री प्रकार सेट कर सकते हैं -

header('Content-Type: text/html; charset=utf-8'); 

वहां पहले से ही कुछ विचार विमर्श StackOverflow पर यहाँ हैं - कृपया एक नज़र

How to make MySQL handle UTF-8 properly setting utf8 with mysql through php

है PHP/MySQL with encoding problems

तो मैं क्या जानना चाहता हूं कि मैं कैसे सीधे अपने डेटाबेस में सूर्योदय स्टोर कर सकता हूं और इसे प्राप्त कर सकता हूं और PHP का उपयोग करके अपना वेबपृष्ठ प्रदर्शित करता हूं।

मुझे यकीन नहीं है कि "डेटाबेस में सीधे भंडारण" से आपका क्या मतलब है .. क्या आपका मतलब PhpMyAdmin या किसी अन्य समान उपकरण का उपयोग कर डेटा दर्ज करना है? यदि हां, तो मैंने यूनिकोड डेटा इनपुट करने के लिए PhpMyAdmin का उपयोग करने का प्रयास किया है, इसलिए उसने मेरे लिए ठीक काम किया है - आप phpmyadmin का उपयोग करके डेटा इनपुट करने का प्रयास कर सकते हैं और पुष्टि करने के लिए एक php स्क्रिप्ट का उपयोग करके इसे पुनर्प्राप्त कर सकते हैं। यदि आपको किसी PHP स्क्रिप्ट के माध्यम से डेटा जमा करने की आवश्यकता है, तो जब आप MySQL कनेक्शन बनाते हैं, तो सम्मिलित प्रश्न निष्पादित करने से पहले, और जब आप डेटा चुनते हैं तो बस NAMES और CHARACTER SET सेट करें। वाक्यविन्यास खोजने के लिए उपरोक्त पदों पर एक नज़र डालें। आशा करता हूँ की ये काम करेगा।

** अद्यतन ** बस तय कुछ लेखन-त्रुटियों आदि

+0

इसके अलावा: http://stackoverflow.com/questions/1085093/strategy-for-supporting-unicode-multi-language-in-php5/ – deceze

+2

"नाम UTF8 SET" मेरे लिए चाल किया! धन्यवाद –

+0

यह हेडर सेट किए बिना भी क्यों काम करता है? –

21
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 


<?php 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_query('SET character_set_results=utf8'); 
mysql_query('SET names=utf8'); 
mysql_query('SET character_set_client=utf8'); 
mysql_query('SET character_set_connection=utf8'); 
mysql_query('SET character_set_results=utf8'); 
mysql_query('SET collation_connection=utf8_general_ci'); 

mysql_select_db('onlinetest',$con); 

$nith = "CREATE TABLE IF NOT EXISTS `TAMIL` (
    `data` varchar(1000) character set utf8 collate utf8_bin default NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1"; 

if (!mysql_query($nith,$con)) 
{ 
    die('Error: ' . mysql_error()); 
} 

$nithi = "INSERT INTO `TAMIL` VALUES ('இந்தியா நாட்டின் பக்கங்கள்')"; 

if (!mysql_query($nithi,$con)) 
{ 
    die('Error: ' . mysql_error()); 
} 

$result = mysql_query("SET NAMES utf8");//the main trick 
$cmd = "select * from TAMIL"; 
$result = mysql_query($cmd); 
while($myrow = mysql_fetch_row($result)) 
{ 
    echo ($myrow[0]); 
} 
?> 
</body> 
</html> 
+0

कोड के लिए धन्यवाद, मुझे यह पहले से ही मिला है .. –

+1

बिल्कुल वही जो मैं खोज रहा था। कोड के लिए धन्यवाद! मेरा मानना ​​है कि 'mysql_query (' SET character_set_results = utf8 ');' यूनिकोड वर्ण प्रदर्शित करने के लिए पर्याप्त है? – mccbala

+0

mysql कंसोल में कन्नड़ फ़ॉन्ट को कैसे प्रदर्शित करें मेरी क्वेरी "लैंग मानों में प्रवेश करें ('ಕನ್ನಡ ಸತ್ಯ ಕನ್ನಡ ನಿತ್ಯ')"; –

3

जो पीएचपी (> 5.3.5) पीडीओ बयान, हम नीचे के अनुसार चारसेट सेट कर सकते हैं के लिए देख रहे हैं उन लोगों के लिए:

$dbh = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password'); 
+0

शानदार! अंत में मेरी समस्या हल हो गई। –

1
CREATE DATABASE hindi_test 
CHARACTER SET utf8 
COLLATE utf8_unicode_ci; 
USE hindi_test; 
CREATE TABLE `hindi` (`data` varchar(200) COLLATE utf8_unicode_ci NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
INSERT INTO `hindi` (`data`) VALUES('कंप्यूटर');