2008-10-27 13 views
17

Ich habe einen Backup-Server, der automatisch meine Live-Site, sowohl Dateien und Datenbank sichert.Fragezeichen Zeichen im Text angezeigt, warum ist das?

Auf der Live-Site sieht der Text gut aus, aber wenn Sie die gespiegelte Version anzeigen, wird "?" innerhalb eines Teils des Textes. Dieser Text wird in der Nachrichten-Datenbanktabelle gespeichert.

Hier ist ein Screenshot davon auf dem Live-Server und davon auf dem gespiegelten Server.

Was könnte bei der Sicherung auf dem gespiegelten Server passieren? alt text http://i34.tinypic.com/2mpbfo6.jpg

Antwort

15

Die folgenden Artikel nützlich sein wird

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Nachdem Sie den folgenden Befehl an die Datenbank Ausgabe verbinden:

SET NAMES ‚utf8 ';

Stellen Sie sicher, dass Ihre Web-Seite auch die UTF-8-Codierung verwendet:

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

PHP auch mehrere Funktion bietet, die für Konvertierungen von Nutzen sein wird:

http://us3.php.net/manual/en/function.iconv.php

http://us.php.net/mb_convert_encoding

0

Unicode oder andere Zeichensatzzeichen fallen durch?

Ich habe ähnliche "seltsame" Zeichen auf Websites gesehen, an denen ich oft gearbeitet habe, wenn der Text von einer E-Mail oder einem anderen Dokumentformat (z. B. Wort) in einen Texteditor kopiert wurde. Der Editor kann die Nicht-ASCII-Zeichen anzeigen, der Browser jedoch nicht. Für die Website würde ich vorschlagen, den HTML-Entity-Code für das Zeichen nachzuschlagen und stattdessen dieses einzufügen ... oder zu Standard-Codes zu wechseln.

1

Ihr Browser hat die Codierung der Seite nicht richtig interpretiert (entweder weil Sie eine bestimmte Einstellung erzwungen haben oder die Seite falsch eingestellt ist) und daher einige Zeichen nicht anzeigen kann.

1

Dies wird etwas mit Zeichenkodierungen zu tun haben.

Sind Sie sicher, dass die gespiegelte Site die gleichen Eigenschaften in Bezug auf Zeichenkodierungen wie Ihr Hauptserver hat?

Je nachdem, welche Art von Server Sie haben, kann dies eine Eigenschaft des Serverprozesses sein oder eine Umgebungsvariable.

Wenn dies zum Beispiel eine UNIX-Umgebung ist, versuchen Sie vielleicht, LANG oder LC_ALL zu vergleichen?

Siehe auch here

+0

Der Live-Server ist Solaris, der gespiegelte Server ist Linux Rhel5, wenn das einen Unterschied macht. – Brad

+0

Linux verwendet auch LANG/LC_ALL. Siehe zum Beispiel: http://www.linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html – toolkit

+0

Und auch sehen, ob Sie die HTTP-Header überprüfen können, die von beiden Servern zurückgegeben werden, um offensichtlich zu suchen Diskrepanzen bezüglich der Zeichencodierung. – toolkit

0

Überprüfen Sie den Zeichensatz, der von Ihrem gespiegelten Server ausgegeben wird er. Es scheint einen Unterschied zu dem Hauptserver zu geben - die Live-Site scheint Unicode auszugeben, wo der Spiegel nicht ist.Außerdem ist es in der Regel eine gute Idee, Unicode-Zeichen in Ihrem eingehenden Inhalt zu scrubben und sie durch ihre entsprechenden HTML-Entitäten zu ersetzen.

Ihr spezielles Problem betrifft "intelligente Anführungszeichen", "Bindestriche" und "Bindestriche". Ich weiß, dass Sie Em-Bindestriche durch &mdash; und N-Striche mit &ndash; ersetzen können (was auf der Eingangsseite Ihrer Datenbank getan werden sollte); Ich weiß nicht, was der richtige Ersatz für die intelligenten Zitate wäre. (Ich ersetze normalerweise alle lockigen Anführungszeichen durch "und alle gelockten doppelten Anführungszeichen mit" ... Typografie-Geeks können mich auf Sicht frei schießen.)

Ich sollte beachten, dass einige Browser damit mehr als andere verzeihen .. Ausgabe - Internet Explorer unter Windows neigt dazu, auto-magisch erkennen und zu „reparieren“ diese, Firefox und den meisten anderen Browsern die Fragezeichen angezeigt

0

ich MS in der Regel Wort fluchen und dann den folgenden Wscript laufen

// Ersetzen durch den Pfad zu einer Datei, die gereinigt werden muss
PATH = "test.html"

var go = WScript.CreateObject ("Scripting.FileSystemObject");
var content = go.GetFile (PATH) .OpenAsTextStream(). ReadAll();
var out = go.CreateTextFile ("sauber -" + PATH, wahr);

// Symbole
content = content.replace (/ „/ G '"');
content = content.replace (/“/ G '"');
content = content.replace (/ '/ g, "'");
content = content.replace (/ -/g, "-");
content = content.replace (/ ©/g, "& Kopie;");
content = content.replace (/ ®/g, "& reg;");
content = content.replace (/ °/g, "& Grad;");
content = content.replace (/ ¶/g, "<p>");
content = content.replace (/ ¿/ g, "& iquest;");
content = content.replace (/ ¡/ g, '& iexcl;');
content = Inhalt.replace (/ 0/Cent; ');
content = content.replace (/ £/g, '& Pfund;');
content = content.replace (/ ¥/g, '& Yen;');

out.Write (Inhalt);

9

Bearbeiten Sie Ihre Apache-Konfigurationsdatei auf dem "Spiegel" Server (der Server mit dem Problem), und kommentieren-out die folgende Zeile:

AddDefaultCharset UTF-8 

Dann starten Apache:

service httpd restart 

Das Problem besteht darin, dass die Zeile "AddDefaultCharset UTF-8" den in den HTML-Dateien angegebenen Inhaltstyp überschreibt. z.B.:

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

Das häufigste Symptom ist, dass die Zeichencodes über 127 Display als schwarze Diamanten mit Fragezeichen auf sie (in Chrome, Safari oder Firefox) oder als kleine Kästen (in IE und Opera). HTML-Dateien, die von Microsoft Word generiert werden, haben in der Regel viele solche Zeichen. Der am häufigsten verwendete ist der Zeichencode 160 = 0xA0, der "& nbsp;" in der Windows-1252-Codierung und wird oft zwischen Span-Tags, wie folgt gefunden:

<span style="mso-spacerun: yes">ááá </span> 
+1

Das Auskommentieren der Standard-Zeichensatzlinie funktionierte für mich, benötigte ISO-8859-1. Prost. – Ollie

+1

Das war mein Problem. Ich habe komplett vergessen, den Zeichensatz in meiner Konfigurationsdatei zu definieren. –

+1

Yup, das war mein Problem - der Zeichensatz wurde für UTF-8 eingestellt, aber die Zeichen waren Windows-1252. Das ist, was ich zum Kopieren von einem Word-Dokument bekomme –

3

ich hier hatte eine Lösung für JavaScript Suche im Browser angezeigt und wenn auch nicht direkt mit einer Datenbank im Zusammenhang ...

In meinem Fall habe ich einen Text, den ich im Internet gefunden habe, kopiert und in eine JavaScript-Datei eingefügt und mit Windows Notepad gespeichert.

Wenn die Seite, dass die Strings Dateiausgabe JavaScript verwendet es gab Fragezeichen (wie die in der Frage gezeigt sind) anstelle der Sonderzeichen wie Umlaute etc.

ich die Datei Notepad++ mit geöffnet. Gleich nach dem Öffnen der Datei sah ich, dass die Zeichenkodierung als ANSI gesetzt wurde, wie Sie (Mauszeiger auf Fußzeile) im folgende Screenshot sehen:

enter image description here

Um das Problem zu lösen, klicken Sie auf das Encoding Menü in Notepad++ und wählen Sie Encode in UTF-8. Du solltest gut gehen. :)