2009-07-29 42 views
43

我必須將hindi文本存儲在MySQL數據庫中,使用PHP腳本獲取它並將其顯示在網頁上。我做了以下內容:使用PHP和MySQL存儲和顯示unicode字符串(हिन्दी)

我創建了一個數據庫,並將其編碼設置爲UTF-8,並將排序規則設置爲utf8_bin。 我在表中添加了一個varchar字段,並將其設置爲在charset屬性中接受UTF-8文本。

然後我開始爲它添加數據。在這裏,我不得不復制existing site的數據。 印地文看起來像這樣:回覆:05:30

我直接將這段文字複製到我的數據庫中,並使用PHP代碼echo(utf8_encode($string))來顯示數據。在這樣做的瀏覽器顯示我「??????」。

當我通過瀏覽器中的「查看源代碼」插入文本的UTF等效內容時,但是,將此轉換爲सूर्योदय

如果我在數據庫中輸入並存儲सूर्योदय,它會完美轉換。

所以我想知道的是我如何可以直接將數據庫存儲到我的數據庫並獲取它並使用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來輸入unicode數據,所以它對我來說工作得很好 - 你可以嘗試使用phpmyadmin輸入數據並使用php腳本來檢索它以確認。如果您需要通過Php腳本提交數據,只需在創建mysql連接時設置NAMES和CHARACTER SET,然後再執行插入查詢以及選擇數據。看看上面的帖子來查找語法。希望能幫助到你。

**更新** 只是修正了一些錯別字等

+0

另外:http://stackoverflow.com/questions/1085093/strategy-for-supporting-unicode-multi-language-in-php5/ – deceze 2009-07-29 08:34:28

+2

「集名UTF8」 奏效了我!謝謝 – 2009-07-29 09:17:42

+0

爲什麼即使沒有設置標題也能正常工作? – 2009-07-29 09:34:14

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

感謝您的代碼,我已經得到它.. – 2009-08-25 15:08:27

+1

正是我在找什麼。感謝代碼!我相信只是'mysql_query('SET character_set_results = utf8');'足以顯示unicode字符? – mccbala 2013-12-29 15:34:57

+0

如何在mysql控制檯中顯示kannada字體我的查詢「INSERT INTO lang values('ಕನ್ನಡಸತ್ಯಕನ್ನಡನಿತ್ಯ')」; – 2014-01-28 10:28:05

3

對於那些誰正在尋找PHP(> 5.3.5)PDO語句中,我們可以設置字符集爲每如下:

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

精湛!終於解決了我的問題。 – 2016-11-30 13:22:42

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('कंप्यूटर');