ヒンディー語のテキストをMySQLデータベースに保存し、PHPスクリプトを使用してフェッチし、Webページに表示する必要があります。以下を実行しました。
データベースを作成し、エンコードをUTF-8に設定し、照合順序を_utf8_bin
_に設定しました。テーブルにvarcharフィールドを追加し、charsetプロパティでUTF-8テキストを受け入れるように設定しました。
次に、データを追加します。ここでは、 既存のサイト からデータをコピーする必要がありました。ヒンディー語のテキストは次のようになります。सूर्योदय:05:30
このテキストをデータベースに直接コピーし、PHP code echo(utf8_encode($string))
]を使用してデータを表示しました。そうすると、ブラウザーに「??????」と表示されました。
ただし、ブラウザの「ソースを表示」に移動してテキストのUTF相当を挿入すると、Whenर्योदयは_सूर्योदय
_に変換されます。
_सूर्योदय
_を入力してデータベースに保存すると、完全に変換されます。
したがって、私が知りたいのは、PHPを使用してデータベースに直接格納し、それをフェッチしてWebページに表示する方法です。
また、「सूर्योदय」と入力すると_सूर्योदय
_が表示されるスクリプトがある場合、だれでも理解できるでしょうか。
ソリューションが見つかりました
私は次のサンプルスクリプトを作成しました。それが他の誰かにも役立つことを願っています
_<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 ('सूर्योदय');
_
今、私の質問は、「META」またはヘッダー情報を指定せずにどのように機能したのですか?
ありがとう!
HTML Headセクションで適切な文字セットを設定しましたか?
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
または、PHPスクリプトでコンテンツタイプを設定できます-
header( 'Content-Type: text/html; charset=utf-8' );
StackOverflowについては既にいくつかの議論があります-ご覧ください
MySQLでUTF-8を適切に処理する方法phpを介してmysqlでutf8を設定する
私が知りたいのは、どうやってデータベースを直接データベースに保存し、それをフェッチしてPHPを使ってウェブページに表示できるかということです。
「データベースに直接保存する」という意味がわかりません。PhpMyAdminまたは他の同様のツールを使用してデータを入力するつもりですか?はいの場合、PhpMyAdminを使用してUnicodeデータを入力しようとしましたので、うまくいきました-phpmyadminを使用してデータを入力し、phpスクリプトを使用して確認して確認できます。 Phpスクリプト経由でデータを送信する必要がある場合は、mysql接続の作成時、挿入クエリの実行前、およびデータの選択時にNAMESおよびCHARACTER SETを設定するだけです。上記の投稿を見て構文を見つけてください。それが役に立てば幸い。
**更新**タイプミスなどを修正しました
<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>
PHP(> 5.3.5)PDOステートメントを探している人のために、以下のように文字セットを設定できます。
$dbh = new PDO('mysql:Host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
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('कंप्यूटर');
困難に直面している人のために、php adminに行き、照合をtf8_general_ciに変更してください。