[PHP] Probleme mit txt Datei und encoding

Gast #6820243
Lesenswert?

Ich schlage mich gerade ohne grosse PHP Kenntnisse mit PHP herum und 
habe Probleme mit der encodierung. Das PHP Script öffnet eine txt Datei 
(gespeichert mit UTF-16 LE codierung, Kundenimport und kann nicht anders 
gespeichert werden), die im angehängten Screenshot auf Zeile 229 mit 
UTF-8 encodiert werden sollte. Dies funktioniert aber nicht korrekt. Mit 
dem Debugger ist ersichtlich, dass die Umlaute nicht korrekt angezeigt 
werden. Kann mir jemand weiterhelfen? Könnte da ein Fehler sein oder 
suche ich vielleicht am komplett falschen Ort?

Vielen Dank,
Isabelle
Angehängte Dateien:
Gast #6827276
Lesenswert?

Vielen Dank für die Antworten. Das Input File habe ich überprüft und da 
stimmen die Umlaute.
Mit detectEncoding wird ISO-8859-1 als encoding gefunden (Unbennant1). 
Wenn ich aber dann mit diesem encoding nach einem Wort in $medium suche, 
wird nichts gefunden, obwohl ich sehe, dass das Wort vor kommt 
(Unbennant2). Ich habe mb_strpos auch mit UTF-16 probiert, aber da kam 
das gleiche Ergebnis (false) raus.

Wenn ich im Debugger auf "set value" bei $medium klicke, wird mir 
folgendes angezeigt (Unbennant3): 
"\\u0000w\\u0000a\\u0000s\\u0000s\\u0000e\\u0000r\\u0000 \\u0000&\\u0000 
\\u0000a\\u0000b\\u0000w\\u0000a\\u0000s\\u0000s\\u0000e\\u0000r\\u0000"

Ich nehme an, dies gibt auch nochmal einen Hinweis auf das Encoding 
oder?

Wie muss mein Code lauten, damit ich true zurückbekomme (Unbennant2)?
Angehängte Dateien:
Gast #6827284
Lesenswert?

Isabelle schrieb:
> Wenn ich im Debugger auf "set value" bei $medium klicke, wird mir
> folgendes angezeigt (Unbennant3):
> "\\u0000w\\u0000a\\u0000s\\u0000s\\u0000e\\u0000r\\u0000 \\u0000&\\u0000
> \\u0000a\\u0000b\\u0000w\\u0000a\\u0000s\\u0000s\\u0000e\\u0000r\\u0000"
Das ist UTF-16.

Öffne das File in einem Editor und probiere dort mit verschiedenen 
Encodings, dann siehste schneller ob das Encoding passt. Wenn du es dort 
ermittelt hast stellt du das in deinem Code ein.

Wenn du Pech hast, ist das File ein Mischmasch aus verschiedenen 
Encodings weil mal einer mit falschen Encodingeinstellung das File 
geändert hat.
Gast #6827333
Lesenswert?

bashooka schrieb:
> Öffne das File in einem Editor und probiere dort mit verschiedenen
> Encodings, dann siehste schneller ob das Encoding passt. Wenn du es dort
> ermittelt hast stellt du das in deinem Code ein.

Ich hab das File geöffnet und mal in UTF-8 abgespeichert. Wenn ich es 
dann teste, läuft alles korrekt durch ohne dass ich ich im Code etwas 
verändern musste. Heisst bei mb_strpos ist immer noch ISO-8859-1 als 
Encoding drin, aber mit UTF-8 wird das trotzdem richtig erkannt?

Kann ich allenfalls das File in UTF-16 lassen und dafür beim Öffnen des 
Files (Unbennant4) alles auf UTF-8 codieren? iconv habe ich probiert, 
aber das hat nicht geklappt.
Angehängte Dateien:
Gast #6827809
Lesenswert?

1. detectEncoding würde ich rauswerfen, das funktioniert nicht 
zuverlässig, siehe auch Doku dazu.

2. In deinen iconv-Aufrufen steht nie das Quellformat drinn.
Probier mal bei iconv als Quelle "UTF16LE"

iconv gibts auch als gleichnamiges Kommandozeilenprogramm:
iconv -l: Listet die Encodings, hier die UTFs:
...
UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE,
UTF-32LE, UTF7, UTF8, UTF16, UTF16BE, UTF16LE, UTF32, UTF32BE, UTF32LE,
...

Ansonsten muss du da evt. ein bischen rumprobieren denn der mb-string 
support in PHP war schon immer mehr oder weniger kaputt und sowas wie 
UTF-16 funktioniert meist noch schlechter als UTF-8, nicht nur in PHP. 
Die mb_string-Funktionen tun deshalb meist nicht das was sie sollten.

Wenn mb_string immer noch Ärger macht, dann vielleicht UTF-16 in einen 
einbytiges characterset (ISO-8859-*) wandeln, dann mit den normalen 
strpos-Funktionen arbeiten und das Resultat wieder nach UTF-8 oder was 
auch immer wandeln.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren