Frage

Ich habe eine MySQL -Datenbanktabelle, um den Namen und das Währungssymbol des Landes zu speichern - das Zeichensatz hat korrekt auf UTF8 eingestellt.

Dies sind Beispieldaten, die in die Tabelle eingefügt wurden

insert into country ( country_name, currency_name, currency_code, currency_symbol) values 
('UK','Pounds','GBP','£');

Wenn ich in der Datenbank schaue - das Pfundsymbol erscheint in Ordnung -, aber wenn ich sie aus der Datenbank abrufe und auf der Website anzeige - wird ein seltsames quadratisches Symbol mit einem Fragezeichen anstelle des Pfundsymbols angezeigt.

Bearbeiten in my.cnf - Der Charakterset wurde auf lateinisch gesetzt1 - Ich habe sie in UTF8 geändert - dann habe ich mich als root angemeldet und rannte s - es kehrte zurück

Server characterset:    utf8
Client characterset:    utf8

Kollationen

-- Database
SELECT default_collation_name
  FROM information_schema.schemata
 WHERE schema_name = 'swipe_prod';

THIS DOES NOT RETURN ANYTHING

-- Table
SELECT table_collation
  FROM information_schema.tables
 WHERE TABLE_NAME = 'country';

THIS RETURNS utf8_general_ci

-- Columns
SELECT collation_name
  FROM information_schema.columns
 WHERE TABLE_NAME = 'country';

THIS RETURNS 7 ROWS but all have either null or utf8_general_ci

PHP -Code

<?php
$con = mysql_connect("localhost","user","123456");
mysql_select_db("swipe_db", $con);
$result = mysql_query("SELECT * FROM country where country_name='UK'");
while($row = mysql_fetch_array($result))
{
  echo $row['country_name'] . " " . $row['currency_symbol'];
}
mysql_close($con);
?>

Bitte Ratschläge danke

War es hilfreich?

Lösung

Wenn Sie dieses "seltsame quadratische Symbol mit einem Fragezeichen im Inneren" sehen Ersatzcharakter, Dies ist normalerweise ein Indikator dafür, dass Sie ein Byte im Bereich von 128-255 (128-255) haben und das System versucht, es in UTF-8 zu rendern.

Dieser gesamte Byte-Bereich ist für Single-Byte-Zeichen in UTF-8 ungültig, ist aber alle in westlichen Codierungen wie ISO-8859-1 sehr häufig.

Wenn ich Ihre Seite betrachte und die Zeichenkodierung von UTF-8 auf ISO-8859-1 manuell wechsle (in Firefox mit View >> Character Encoding >> Western (ISO-8859-1)) dann ist die PFUND-ZEICHEN Zeigt richtig an.

Also, was ist dann los? Es ist schwer zu sagen - es gibt Dutzende von Orten, an denen dies verschmutzt werden kann. Aber höchstwahrscheinlich ist es auf Datenbankebene. Das Einstellen des Zeichensets auf der Tabelle auf UTF8 reicht im Allgemeinen nicht aus. Alle Ihre Charsets und Kollationen müssen in Ordnung sein, bevor Charaktere sich ordnungsgemäß um das System bewegen. Eine häufige Fallstrick ist nicht ordnungsgemäß eingestellt Verbindungsschelmen, Ich würde dort anfangen.

Lassen Sie mich wissen, wenn Sie mehr Anleitung benötigen.

BEARBEITEN

Um zu überprüfen, welche Bytes tatsächlich für diesen Wert gespeichert sind, führen Sie diese Abfrage aus.

SELECT hex( currency_symbol )
  FROM country
 WHERE country_name = 'UK'

Wenn du siehst A3 Dann wissen Sie, dass der Charakter als ISO-8859-1 gespeichert wird. Dies bedeutet, dass das Problem während oder vor dem Schreiben in die DB auftritt.

Wenn du siehst C2A3 Dann wissen Sie, dass der Charakter als UTF-8 gespeichert ist. Dies bedeutet, dass das Problem nach dem Lesen aus der DB und vor dem Schreiben in den Browser auftritt.

Bearbeiten 2

-- Database
SELECT default_collation_name
  FROM information_schema.schemata
 WHERE schema_name = 'your_db_name';

-- Table
SELECT table_collation
  FROM information_schema.tables
 WHERE TABLE_NAME = 'country';

-- Columns
SELECT collation_name
  FROM information_schema.columns
 WHERE TABLE_NAME = 'country';

Andere Tipps

Meine in meinen 2 Pence. ich benutze utf8_encode () Ausgabe der Daten aus der Datenbank. Dies scheint sich auch um andere Charaktere zu kümmern.

Versuchen Sie es zu verwenden

&pound;

Anstelle des £ Symbols, alternativ, wo Sie das £ Zeichen drucken, tun Sie:

<%=replace(stringWithPoundInIt,"£","&pound;"%>

Ich hatte das gleiche Problem. Was ich getan habe, war, dass ich das gleich nach der Verbindung zur Datenbank (PHP) betrieben habe:

mysql_query("SET NAMES utf8");

Hoffe das hilft..

Ich hatte das gleiche Problem und habe es gelöst, indem ich den folgenden PHP -Code kurz vor dem Ausführen der Auswahlabfrage in der MySQL -Datenbank hinzufügte.

mysql_query("SET character_set_results=utf8", $link);

Ich bin selbst auf dieses Problem gestoßen und habe in der Ausgangsphase mithilfe von "gelöst".mb_convert_encoding".

Verwenden Sie Ihr Beispiel ...

echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");

Sie können auschecken hierIch bin mir nicht sicher, ob es funktioniert, aber ich probiere es aus, denn das ist seltsam, dass ich so etwas noch nie gesehen habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top