PHP string konvertieren von windows-1250 auf utf-8
Ich krabbele windows-1250 Website (meta http-equiv="Content-Type" Content="text/html; charset=windows-1250").
Da meine Datenbank ist utf-8, ich muss zur Konvertierung der Daten zu utf-8.
Für die Arbeit, die ich habe versucht, iconv ("windows-1250', 'UTF-8', $s); es gibt "ÄŚarls" statt "Čarls".
Es gibt ein wenig bessere Ergebnisse, wenn die Kodierungen wechseln die Plätze iconv('UTF-8', 'windows-1250', $s); gibt "Èarls" statt "Čarls". Seltsam.
Haben Sie eine Idee, wie kann ich die Konvertierung in utf-8?
Vielen Dank im Voraus.
- Sind Sie 1000% sicher, dass die Website, die Sie kriechen windows-1250? Stellen Sie sicher, dass im browser (siehe die Codierung wechselt)? Was ist Ihre Ausgabe-Kodierung?
- Wie geben Sie die Zeichenkodierung der Ausgabe?
- Wenn Sie sagen, "gibt", was genau meinst du? Können Sie schneiden Sie die Datenbank aus der Gleichung heraus und drucken Sie die konvertierte Ergebnis aus PHP-code, mit dem Sie Ihre eigene Seite-Codierung UTF-8? Oder haben Sie es bereits getan?
- Wenn ich sage gibt, ich meine, was ist geschrieben in der Datenbank (das ist für mich am wichtigsten). Gedruckt auf utf-8-Seite gibt es "ÄŚarls" iconv ("windows-1250', 'UTF-8', $s) oder "�arls" (iconv('UTF-8', 'windows-1250', $s)). Ich erwarte, dass "Čarls" die ist von der ursprünglichen Website gecrawlt.
- Allgemeine check-Liste: 1. mysql-Tabelle, schema zu verwenden, der utf-8-2. mysql-clients Verbindung auf utf-8
mysql --default-character-set=utf8
3. phpmysqli_set_charset
auf utf-8 4. html-Codierung auf utf-8-5. Kitt, emac Kunden... in utf-8 - Alles ist bereits in utf-8 mit Ausnahme der Seite, die ich versuche zu kriechen 🙁
- einige Bereich müssen übersehen, wie, wie man die Ergebnisse von mysql ? was ist die
show variables like '%char%'
zurück? - Einige Zeichen können nicht direkt codiert in utf-8 aus Fenster-1250. Versuchen zu konvertieren, die wenigen Zeichen, die Sie erwähnt in HTML-Entitäten. und dann auf utf-8.
- alles ist utf8 außer character_set_server = latin1
- Versucht iconv ("windows-1250', 'UTF-8', htmlentities($s)), dasselbe. Meinst du so?
- zurück zu dieser Frage, wie Sie die Ergebnisse zurück, die von mysql? die mysql-client wird verwendet? wie Sie eine Verbindung zu mysql-client?
- Ich benutze SQLYog. Es ist eingestellt auf utf-8 verwenden, da die Datenbank und alle Tabellen sind utf-8. Anderen utf-8-strings sichtbar sind ok, nur von dieser Seite sind Sie problematisch.
- versuchen
mb_detect_order(array('windows-1250', 'utf-8')); echo mb_detect_encoding(file_get_contents('YOUR_FILE'));
Es sollte echoASCII
- bool(false)
- mb_list_encodings() gibt Windows-1252, Windows-1254 Windows-1251, aber keine Windows-1250. Ich dachte, die haben nichts zu tun mit "iconv": P ich arbeite auf der lokalen windows-Maschine ist, ist ein Weg, um fügen Sie Fenster-1250 wenn das ein problem?
- Wie ist das crawling getan ? Und die Ergebnisse zurück, die von
print_r( mb_list_encodings() );
? - new Zend_Http_Client(); $client->setUri($uri); $client->request()->getBody(); Ergebnis mb_list_encodings sollte nicht afect iconv().
- Nicht zu sicher, Zend_Http_Client das Verhalten ändern? Von meiner Seite aus, ich habe keine windows-1250 unterstützen, aber wenn ich einfach nur das tun, file_get_contents und tun die iconv, es funktioniert. Und die mb_detect_encoding zurück ascii (was auch stimmt). So, vielleicht möchten Sie einen test starten mit einem einfachen file_get_contents und testen wieder die iconv?
- Funktioniert es auf anderen windows-server ohne encoding-Konvertierung! Also, es muss was mit dem server-setup... mbstring-setup ist das gleiche, muss eine andere Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leute, ich bin wirklich Leid. Es war das Datenbank problem. $connection->setCharset('UTF8'); es behoben. Kein iconv, keine mbstring.
Ich war so sicher, dass ich brauchen, um zu konvertieren charset, dass ich vergaß, zu überprüfen, ob es funktioniert auf uft8 Seite ohne Konvertierung.
Danke für alle Kommentare.
Ich würde empfehlen, zunächst zu überprüfen, ob oder nicht die korrekten Daten erreichen iconv (und ebenso, was Los ist, sich von iconv).
Verwenden Sie eine Anweisung wie
echo bin2hex($string)
und Blick auf die byte-stream für$s
vor iconv. Wenn Sie haben, die Zeichenfolge, die Sie glauben, Sie haben das erste byte solltec8
. Schaut man dann in den byte-stream nach "iconv" - die ersten bytes werden solltec48c
(UTF-8); wenn Sie convert to UCS-2 Sie sehen würden010c
dem Sie sehen ist das betreffende Zeichen in unicode.Je nach dem Ergebnisse dieser werden Sie wissen, wenn Ihr ein problem mit der Erhebung der Daten (D. H. Sie nicht sehen, das c8), Ihre iconv-installation (D. H. die Konvertierung erzeugt das falsche Ergebnis) oder indem diese Daten in Ihrer Datenbank (d.h. das Ergebnis von iconv ist als erwartet).