2016-05-23 14 views
0

Ich kämpfe mit der Sonderzeichencodierung auf meiner Website. Ich habe ein input Feld mit einem verbundenen datalist. Die datalist wird von meiner Datenbank beim Laden der Seite ausgefüllt. Aber irgendwie bekomme ich dieses Fragezeichen innerhalb von Diamantsymbolen für jedes Sonderzeichen in den Datenlistenoptionen und normalen Fragezeichen für spezielle Sprachzeichen (z. B. Chinesisch). Hier ist, was ich versucht habe:Erhalte Fragezeichen für Sonderzeichen, nachdem du mehrere Dinge ausprobiert hast. Was kann ich noch versuchen?

  1. Der erste Datensatz ist eine CSV-Datei, die ich in meine Datenbank aufgenommen. Ich überprüfte die Sortierung in Notepad ++ und es wird auf UTF8 ohne BOM festgelegt.
  2. Ich verwende phpmyadmin für die Datenbankverwaltung. Die Serververbindungssortierung ist auf utf8mb4_bin festgelegt. Die Tabelle, in der ich die Daten speichere, hat die Sortierung utf8_bin. Und wenn ich die Daten importierte, stellte ich sicher, dass sie utf8 verwendeten. Die Zeichen werden auch in phpmyadmin korrekt angezeigt.
  3. Im <head> Abschnitt meines index.php auch <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> folgend Ich habe

Aber ich habe immer noch die Fragezeichen. Was könnte ich noch überprüfen?

+0

Verwenden Sie htmlentities() –

+0

Versuchen Sie: '' – Thamilan

+0

@Thamilan Jetzt werden die europäischen Sonderzeichen korrekt angezeigt . Ich dachte, sie würden in utf-8 enthalten sein !? Sonderzeichen (z. B. Chinesisch) werden jedoch weiterhin in einem normalen Fragezeichen angezeigt (ohne den Diamanten) – TotoSchillaci

Antwort

0

Sie können leicht überprüfen, ob die Zeichenfolge, die Sie aus DB abrufen, utf8 mit diesem Code gültig ist. Wenn es gültig UTF-8 ist, dann ist Ihr Problem in der Präsentationsschicht.

if(mb_detect_encoding($str, 'UTF-8', true)){ die('I\'m a valid UTF-8 string, YAY :D '); }

+0

Es ist sehr schwierig, Zeichenkodierungen aufgrund der massiven Überlappung und Lücken in den Bereichen verschiedener Codierungen richtig zu erkennen . Während Ihre Antwort ein guter Vorschlag ist, ist es kein völlig zuverlässiger Ergebnisproduzent. – Martin

+0

stimme ich völlig zu, aber da die Frage ziemlich vage war, fühlte sich das wie ein guter Startpunkt an. –

0

ich für Datenbank-Management-bin mit phpMyAdmin. Die Serververbindungssortierung ist auf utf8mb4_bin eingestellt. Die Tabelle, in der ich die Daten speichere, hat die Sortierung utf8_bin. Und wenn ich die Daten importierte, stellte ich sicher, dass ich utf8 benutze. Die Zeichen werden auch in phpmyadmin korrekt angezeigt.

Dies ist eine wahrscheinliche Ursache, möchten Sie diese-utf8mb4_Sortierungs ändern.

Andere Punkte sind PHP mb_ Aktionen zu verwenden, wie

mb_internal_encoding('UTF-8'); 
mb_http_output('UTF-8'); 

An der Spitze Ihrer PHP-Seiten. Auch sollten Sie die Verbindung Zeichensatz in der Datenbank-Verbindungsobjekt setzen:

$this->MySQLiObjectVariable->set_charset("utf8mb4"); 

set_charset Manual Page

Was oft passiert ist, dass während MySQL Speicher richtig eingestellt ist und die PHP-Ausgabe ist richtig eingestellt, die Kommunikation zwischen den beiden wird als Systemstandard festgelegt, der oft nicht der beste Zeichensatz für die gegebenen Daten ist (typischerweise latin1_ oder utf8_).

Auch kann es in der Regel benefitial sein, die Meta-Zeichensatz Erklärung zu ignorieren und sie tatsächlich eingestellt mit einem direkten HTML-Header wie:

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

auf Ihrer Ausgabeseite vor den HTML-Inhalten erscheinen, den Browser-BEKOMMT Gewährleistung die Daten als UTF-8.

Lesen Sie auch UTF-8 all the way through.

+0

Danke für die lange Antwort. Ich habe versucht, alles zu _utf8mb4_ zu ändern und ich habe versucht, die PHP mb_-Aktionen einzuschließen, aber es hat immer noch nicht geklappt. Die Header-Informationen der Website, die ich in einer zusätzlichen Header.php-Datei speichern, die ich in jeder Website einschließen. – TotoSchillaci