2009-07-29 6 views
43

ヒンディー語のテキストをMySQLデータベースに保存し、PHPスクリプトを使用して取得し、Webページに表示する必要があります。私は次のようにしました:PHPとMySQLを使用してUnicode文字列(हिन्दी)を保存して表示する

データベースを作成し、そのエンコーディングをUTF-8に設定し、照合順序をutf8_binに設定しました。 テーブルにvarcharフィールドを追加し、charsetプロパティでUTF-8テキストを受け入れるように設定しました。

次に、データを追加するように設定しました。ここで私はexisting siteからデータをコピーしなければならなかった。 ヒンディー語のテキストは次のようになります。सूर्योदय:05:30

私はこのテキストを自分のデータベースに直接コピーし、PHPコードecho(utf8_encode($string))を使用してデータを表示しました。そうすると、ブラウザは私に "??????"を示しました。

ブラウザで「ソースを表示」に移動して、テキストのUTFに相当するものを挿入した場合、सूर्योदयはसूर्योदयに変換されます。

सूर्योदयを入力してデータベースに保存すると、完全に変換されます。

私が知りたいことは、私がデータベースに直接保存して、それをフェッチし、PHPを使用して自分のWebページに表示する方法です。

また、सूर्योदयと入力すると、私にसूर्योदयとなるスクリプトがあるかどうかわかります。

ソリューションは、私は私のために働いた次のサンプルスクリプトを書いた

を発見しました。

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

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

今、私の質問は、どのようにそれは「META」やヘッダ情報を指定せずに動作しなかったされている、それはヒンディー語UTF文字列を格納し、私のデータベースのためにあまりにも

<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> 

ダンプ他の誰かを役に立てば幸い?

ありがとうございます!

答えて

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を使用して 自分のWebページで、表示をフェッチ ことができる方法です。

"データベースに直接保存する"とはどういう意味ですか?PhpMyAdminや他の同様のツールを使用してデータを入力するという意味ですか?はいの場合は、PhpMyAdminを使用してユニコードデータを入力しようとしましたので、うまくいきました.- phpmyadminを使用してデータを入力し、PHPスクリプトを使用して確認して確認することができます。 PHPスクリプトでデータを送信する必要がある場合は、mysql接続を作成するとき、insertクエリを実行するとき、データを選択するときに、NAMESとCHARACTER SETを設定するだけです。上記の投稿を見て構文を見つけてください。それが役に立てば幸い。

** UPDATE ** ただ、固定いくつかのタイプミスなどのPHP(> 5.3.5)PDO文は、我々は以下のとおりに文字セットを設定することができますを探している人のために

+0

また:http://stackoverflow.com/questions/1085093/strategy-for-supporting-unicode-multi-language-in-php5/ – deceze

+2

"NAMESのUTF8を設定し、" 私のためのトリックをやりました!ありがとう –

+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');はUnicode文字を表示するのに十分でしょうか? – mccbala

+0

mysqlコンソールにkannadaフォントを表示するにはどうすればいいですか? "INSERT INTO lang values( 'ಕನ್ನಡಸತ್ಯಕನ್ನಡதेತ್ಯ'); –

3

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