Подтвердить что ты не робот

Сохранение и отображение строки unicode (हिन्दी) с использованием PHP и MySQL

Мне нужно хранить хинди-текст в базе данных MySQL, извлекать его с помощью PHP script и отображать его на веб-странице. Я сделал следующее:

Я создал базу данных и установил ее кодировку в UTF-8, а также сопоставление с utf8_bin. Я добавил поле varchar в таблицу и установил, чтобы он принял текст UTF-8 в свойстве charset.

Затем я решил добавить к нему данные. Здесь мне пришлось копировать данные из существующего сайта. Текст хинди выглядит так: सूर्योदय: 05: 30

Я прямо скопировал этот текст в свою базу данных и использовал код PHP echo(utf8_encode($string)) для отображения данных. После этого браузер показал мне "??????".

Когда я вставил эквивалент UTF текста, перейдя в "просмотр источника" в браузере, однако, सूर्योदय переводит на सूर्योदय.

Если я вхожу и сохраняю सूर्योदय в базе данных, он отлично преобразуется.

Итак, я хочу знать, как я могу напрямую хранить सूर्योदय в своей базе данных и извлекать ее и отображать на моей веб-странице с помощью PHP.

Кроме того, может ли кто-нибудь помочь мне понять, существует ли script, который при вводе в सूर्योदय дает мне सूर्योदय?

найденное решение

Я написал следующий образец script, который работал у меня. Надеюсь, это тоже поможет кому-то еще.

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

Дамп для моей базы данных, хранящей строки hindi 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" или информации заголовка?

Спасибо!

4b9b3361

Ответ 1

Вы установили правильную кодировку в разделе HTML Head?

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

или вы можете установить тип контента в своем php script, используя -

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

В StackOverflow уже есть обсуждения, пожалуйста, посмотрите

Как заставить MySQL правильно обрабатывать UTF-8 установка utf8 с помощью mysql через php

PHP/MySQL с проблемами кодирования

Так что я хочу знать, как я могу прямо храните सूर्योदय в мой базы данных и получить его и отобразить в моя веб-страница с использованием PHP.

Я не уверен, что вы подразумеваете под "непосредственным хранением в базе данных". Вы имели в виду ввод данных с использованием PhpMyAdmin или любого другого подобного инструмента? Если да, я попытался использовать PhpMyAdmin для ввода данных в Юникоде, поэтому он отлично справился со мной - вы можете попробовать ввести данные с помощью phpmyadmin и получить его с помощью php script для подтверждения. Если вам необходимо отправить данные с помощью PHP скрипт, просто установите NAMES и CHARACTER SET, когда вы создаете соединение mysql, перед выполнением запросов на вставку и при выборе данных. Взгляните на приведенные выше сообщения, чтобы найти синтаксис. Надеюсь, что это поможет.

** ОБНОВЛЕНИЕ ** Просто исправлены некоторые опечатки и т.д.

Ответ 2

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

Ответ 3

Для тех, кто ищет PHP ( > 5.3.5) инструкцию PDO, мы можем установить кодировку, как показано ниже:

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

Ответ 4

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

Ответ 5

Для тех, кто сталкивается с трудностями, просто зайдите в php admin и измените параметры сортировки на utf8_general_ci Выберите Таблица, перейдите к Операциям >> Параметры таблицы >> Должны быть сопоставления