Frage

Ich, wie viele andere PHP -Entwickler hatten Probleme mit der Charaktercodierung, wird die Frage die Schritte beschreiben, die ich durchführe, um sicherzustellen, dass meine Daten als UTF8 gespeichert und ausgegeben werden. Ich hätte gerne Ratschläge, was ich sonst noch berücksichtigen und oder mich mit meinem aktuellen Denken ändern sollte.

Ich habe eine MySQL -Datenbank DEFAULT CHARACTER UTF-8 Meine Tische haben Zusammenstellung von utf8_general_ci

Ich verwende ein PHP -Skript, um Daten aus einem RSS -Feed zu lesen und diese Daten in der Datenbank zu speichern. Bevor ich diese Daten speichere, überprüfe ich, ob diese Daten UTF-8 sind oder nicht, indem ich Folgendes mache:

protected function _convertToUTF8($content) {
    $enc = mb_detect_encoding($content);
    return mb_convert_encoding($content, "UTF-8", $enc);
}

Wenn ich diese Daten auf eine Webseite ausgibt, stelle ich die Header in PHP ein

header("Content-type: text/html; charset=utf-8");

Und ich habe auch das Meta-Tag des Inhalts auf UTF-8 festgelegt

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

Bisher funktioniert alles wie erwartet, dass ich keine lustigen Charaktere ausgibt und alles reibungslos verläuft, aber sollte ich beim Umgang mit diesen Daten etwas anderes ändern/betrachten?

Das Problem, das ich jetzt habe, besteht darin, diese Daten in eine TXT-Datei (CSV) auszugeben, die ich FWrite () verwende, die die Datei erfolgreich erstellt hat, aber die Drittanbieter, die ich diese Datei überhole, an sagt, dass die Datei nicht UTF-8 ist. Ich bin mir nicht sicher, ob die Daten als UTF-8 ausgegeben werden, Wie kann ich das überprüfen? Wenn Sie sich über SSH auf dem Remote -Server angemeldet Itâs a Wenn ich die Datei habe, bekomme ich Itâ~@~Ys Wenn ich weniger die Datei bekomme, bekomme ich It<E2><80><99>s. Was vermisse ich hier?

Danke im Voraus!

War es hilfreich?

Lösung 2

Am Ende war es eine BOM, die für die externe Anwendung erforderlich war, um die Datei ordnungsgemäß zu lesen.

Andere Tipps

Sie können die Codierung von Daten nicht erkennen. Codierung ist immer eine Meta-Information neben den Daten selbst.

Eben mb_detect_encoding() Versuche es am besten, dies zu tun. Sie sollten sie niemals verwenden, um Daten automatisch zu verarbeiten. Da es nicht möglich ist, Codierung aus den Daten selbst zu erkennen, kann diese Funktion nicht so gut.

Verlassen Sie sich nicht darauf. Verwenden Sie es nur für die manuelle Inspektion, falls Sie ein Problem debuggen oder im letzten Rückweg von Fallback, aber nie in den Standarddatenverfahren. Auch dann vertrauen Sie diesen Informationen nicht zu sehr.

Wie kann ich das sagen? Nur ein Beispiel: Ein Text kann gültig sein, und es wird eine Erkennungsroutine für UTF-8 zurückgegeben, dass er gültig von UTF-8 codiert ist. Und das ist nur ein Beispiel. Die Wahrheit ist, das ist nur viel komplexer.

Nehmen Sie es also als selbstverständlich an, dass Sie die Codierung der Rohdaten nicht erkennen können.

Suchen Sie stattdessen nach den Meta -Informationen, die die Codierung angeben. Wenn keine Codierungsinformationen angegeben werden, suchen Sie die Standardcodierung in den Spezifikationsdokumenten für den Datentransport.

Wenn Sie Daten von RSS -Feeds gespeichert haben, suchen Sie die Informationen entweder in den Antwortheadern und/oder im XML -Prolog. Es enthält normalerweise die Codierung in der ISO -Notation des Dokuments.

Wie Ihre Datenbank erwartet, müssen Daten, die als UTF-8 codiert sind, Ihre Verarbeitung achten, dass nur UTF-8-Daten in die Datenbank eingefügt werden. Überprüfen und erwerben Sie die Codierung der Daten und machen Sie dann die Schritte aus, um die Codierung zu ändern. Aber verlassen Sie sich nicht auf mb_detect_encoding() diese Schritte ausführen.

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