2016-04-10 1 views
0

Ich denke, das sollte eine einfache Lösung sein, aber die Antwort entzieht sich mir. Ich habe versucht zu googeln und hier zu suchen ... ohne Erfolg.Echo aus der Datenbank in der Kollatierung "latin1_swedish_ci" ergibt in Fragezeichen Symbole auf der Webseite

Ich habe einen langen Text in meiner Datenbank gespeichert. Die Sortierung ist latin1_swedish_ci „ und wenn ich es in der Datenbank zu sehen, wird es richtig gespeichert. Zum Beispiel:

 string= Sally was walking one day and saw Tom. Tom said "Hi, Sally!" Sally's response was "Hi, Tom." 

jeden“ oder "zeigt als weißes Fragezeichen auf einem schwarzen Diamanten auf.

Ich möchte

 $result=mysqli_query($db,"SELECT string FROM Table WHERE 1") 
    while($row = mysqli_fetch_assoc($result)){ 
      echo $row['string']; 
    } 

und haben alle Zeichen angezeigt. kann jemand helfen?

+0

Sind Sie sicher, dass es sich um echte Anführungszeichen und nicht um "intelligente Anführungszeichen" (Anführungszeichen) handelt? –

+0

haben Sie versucht, echo htmlentities ($ row ['string']); – jeff

+0

@dagon Ich weiß nicht ... Ich weiß, dass ich sie in meine Datenbank eingegeben habe, ich weiß nicht, wie ich den Unterschied erkennen kann. –

Antwort

0

Nachdem ich etwas mehr Nachforschungen angestellt hatte, fand ich einen Beitrag, der vorher nicht kam. Diese Lösung für ein ähnliches Problem wurde von Emil H angeboten:

MySQL Zeichensatzkonvertierungen on the fly zu etwas führt die Verbindung charset genannt. Sie können diese charset geben Sie die SQL-Anweisung

SET NAMES utf8 verwenden oder eine bestimmte API-Funktion wie mysql_set_charset() verwenden:

mysql_set_charset ("UTF-8", $ conn); Wenn dies richtig gemacht wird, gibt es keine Funktionen wie utf8_encode() und utf8_decode().

Sie müssen auch sicherstellen, dass der Browser die gleiche Codierung verwendet. Dies geschieht normalerweise mit einer einfachen Kopfzeile:

header ('Content-type: text/html; charset = utf-8'); (Beachten Sie, dass der Zeichensatz im Browser utf-8 heißt, in MySQL jedoch utf8.

)

In den meisten Fällen die Verbindung charset und Web-charset sind die einzigen Dinge, die Sie von den Überblick behalten müssen, so, wenn es noch nicht funktioniert gibt es wahrscheinlich etwas anderes falsch Ihr tut. Versuchen Sie, damit ein wenig zu experimentieren, es dauert normalerweise eine Weile, um vollständig zu verstehen.

shareedit 25. März '09 um 12:17 bearbeitet Mar beantwortet 25 '09 um 11:52

Emil H 28k75778

nach der Lektüre, dass ich den PHP-Code sah sie/er darüber reden und festgestellt, dass es eine SQLi-Entsprechung mit unterschiedlicher Syntax gibt.

(PHP 5> = 5.0.5, PHP 7) mysqli :: set_charset - mysqli_set_charset - Setzt den Standard-Client-Zeichen

Beschreibung ¶

Objektorientierte Stil

gesetzt

Bool Mysqli :: set_charset (string $ charset) Procedural Stil

Bool mysqli_set_charset (mysqli $ link, string $ charset) die Standard-Sets Zeichen s Diese Datei wird beim Senden von Daten vom und zum Datenbankserver verwendet.

Ich hoffe, dass dies hilft jemand mit dem Problem, das ich hatte.

0

Sie können möglicherweise Ihre mit diesem Beispiel beheben.

SQL:

 
    CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `string` longtext, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; 

INSERT INTO `test` VALUES ('1', 'Sally was walking one day and saw Tom. Tom said \"Hi, Sally!\" Sally\'s response was \"Hi, Tom.\"'); 

PHP:

$query = "SELECT id, string FROM test WHERE id = 1"; 

if ($result = mysqli_query($link, $query)) { 

    while ($row = mysqli_fetch_assoc($result)) { 
     echo $row['string']; 
    } 

    mysqli_free_result($result); 
} 

mysqli_close($link); 
+0

das könnte funktionieren ... und wenn die Geschichte von Tom und Sally alles wäre, mit dem ich es zu tun hatte, wäre das gut genug. Leider ist das ein TON der Bearbeitung zu jedem Eintrag, den ich bereits habe ... (so etwas wie 300 Einträge (bisher) mehrere von ihnen sind 4 Seiten typisierten Textes) Ich hatte auf eine elegantere Antwort gehofft. Wenn es keine bessere Antwort gibt, habe ich etwas für die zukünftigen Einträge gelernt. Danke für die Antwort. –

+0

Haben Sie versucht: html_entity_decode ($ row ['string']); – Gooziie

+0

nein ich habe es nicht geschossen –

0

Ein einziges Fragezeichen eine Art von Symptome ist; eine Reihe von Fragezeichen ist eine andere; und schwarzer Diamant mit einem Fragezeichen ist noch ein weiteres Problem. Fegen Sie den Schiefer sauber ... Lassen Sie alle Funktionen kodiert los und ...

  • Lassen Sie die Daten in den Client sein UTF8-codiert und
  • Stellen, dass die Verbindung CHARACTER SET utf8 und
  • Have die Tabellen/Spalten sind CHARACTER SET utf8 und
  • Verwenden Sie auf HTML-Seiten <meta charset=UTF-8>.
+0

Ich werde nachsehen, wie ich meine SQL in utf-8 umwandeln kann ... ich habe gestern eine Frage dazu gesehen. –

+0

Und am Vortag und ein Dutzend letzte Woche, und ... –