it-swarm.com.de

Speichern und Anzeigen von Unicode-Zeichenfolgen (हिन्हिन) mit PHP und MySQL

Ich muss Hindi-Text in einer MySQL-Datenbank speichern, ihn mit einem PHP -Skript abrufen und auf einer Webseite anzeigen. Ich habe folgendes gemacht:

Ich habe eine Datenbank erstellt und deren Codierung auf UTF-8 und die Sortierung auf utf8_bin Gesetzt. Ich habe der Tabelle ein varchar-Feld hinzugefügt und festgelegt, dass UTF-8-Text in der charset -Eigenschaft akzeptiert wird.

Dann habe ich mich daran gemacht, Daten hinzuzufügen. Hier musste ich Daten von einer vorhandenen Seite kopieren. Der Hindi-Text sieht folgendermaßen aus: सूर्सूर: 05: 30

Ich habe diesen Text direkt in meine Datenbank kopiert und den PHP Code echo(utf8_encode($string)) verwendet, um die Daten anzuzeigen. Dabei zeigte mir der Browser "??????".

Wenn ich das UTF-Äquivalent des Texts über "Quelltext anzeigen" im Browser einfügte, wird सूर्सूर in सूर्योदय Übersetzt.

Wenn ich सूर्योदय In die Datenbank eingebe und speichere, wird es perfekt konvertiert.

Ich möchte wissen, wie ich सूर्सूर direkt in meiner Datenbank speichern und mit PHP abrufen und auf meiner Webseite anzeigen kann.

Kann mir jemand helfen, zu verstehen, ob es ein Skript gibt, das mir bei Eingabe von सूर्सूर सूर्योदय Gibt?

Lösung gefunden

Ich habe das folgende Beispielskript geschrieben, das für mich funktioniert hat. Hoffe es hilft auch jemand anderem

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

Der Speicherauszug für meine Datenbank, in der hindi utf-Zeichenfolgen gespeichert sind, lautet

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

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

Jetzt ist meine Frage, wie es ohne Angabe von "META" oder Header-Informationen funktioniert?

Vielen Dank!

46
Anirudh Goel

Haben Sie im Abschnitt "HTML-Kopf" den richtigen Zeichensatz festgelegt?

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

oder Sie können den Inhaltstyp in Ihrem PHP-Skript einstellen mit -

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

Es gibt bereits einige Diskussionen hier auf StackOverflow - bitte schauen Sie

Wie man MySQL UTF-8 richtig handhaben lässttf8 mit mysql durch php setzen

PHP/MySQL mit Codierungsproblemen

Ich möchte wissen, wie ich सूर्सूर direkt in meiner Datenbank speichern und mit PHP abrufen und auf meiner Webseite anzeigen kann.

Ich bin mir nicht sicher, was Sie unter "direkt in der Datenbank speichern" verstehen. Meinten Sie, Daten mit PhpMyAdmin oder einem ähnlichen Tool einzugeben? Wenn ja, habe ich versucht, mit PhpMyAdmin Unicode-Daten einzugeben, so dass es für mich gut funktioniert hat. Sie können versuchen, Daten mit phpmyadmin einzugeben und sie mit einem PHP-Skript abzurufen, um dies zu bestätigen. Wenn Sie Daten über ein PHP-Skript senden müssen, setzen Sie einfach NAMES und CHARACTER SET, wenn Sie eine MySQL-Verbindung erstellen, bevor Sie Einfüge-Abfragen ausführen und wenn Sie Daten auswählen. Schauen Sie sich die obigen Beiträge an, um die Syntax zu finden. Ich hoffe es hilft.

** UPDATE ** Nur ein paar Tippfehler etc. Behoben

37
TigerTiger
<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>
22
ROSE

Für diejenigen, die nach einer PHP (> 5.3.5) PDO-Anweisung suchen, können wir den Zeichensatz wie folgt einstellen:

$dbh = new PDO('mysql:Host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
7
Sandeep
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('कंप्यूटर');
1
Vinod Tiwari

Für diejenigen, die mit Schwierigkeiten konfrontiert sind, muss nur der PHP-Administrator die Sortierung in utf8_general_ci auswählen. Gehen Sie zu Operationen >> Tabellenoptionen >> Sortierungen sollten vorhanden sein

0
Aklesh Singh