• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP Problem: file_get_contents() und json_decode()

dogsnhumans.de

New member
Hallo liebe Community,

ich möchte eine JSON-Datei die auf meinem lokalen Webserver liegt mit PHP auslesen:

PHP:
$datei = file_get_contents('data/content.json');
$arr = json_decode($datei, true);
$error = json_last_error();
print $error;

Als Ausgabe erhalte die Zahl --> 4
(Syntax Error)

Die Variable $datei enthält einen String --> {"foo-bar": 12345}
Die Variable $arr enthält den Wert --> NULL


Wenn ich einen String (JSON valide) an die Funktion json_decode() übergebe funktioniert alles:

PHP:
$datei = '{"foo-bar": 12345}';
$arr = json_decode($datei, true);
$error = json_last_error();
print $error;

$arr enthält dann folgendes:

Code:
array(1) {
  ["foo-bar"]=>
  int(12345)
}

$error enthält den Wert --> 0

Die PHP Datei und die JSON Datei habe ich im UTF-8 Format abgespeichert.

Ich kanns mir nicht erklären *g*. Denn die Variable $datei enthält in beiden Beispielen den gleichen String. Wäre toll wenn mich jemand aufklären könnte. :rolleyes:
 
Ich habe nun die beiden Strings miteinander verglichen:

PHP:
$datei = file_get_contents('data/content.json');
$arr = json_decode($datei, true);

$datei_2 = '{"foo-bar": 12345}';
$arr = json_decode($datei_2, true);

$test = strcmp($datei, $datei2);
print $test;

Test gibt 1 aus. Somit gibt es einen nicht sichtbaren Unterschied. :confused:

Scheint ein Editorproblem zu sein. Wenn ich die Datei mit PHP anlege funktioniert alles.

Ich benutze Notepad++ in der neusten Version 6.1.4. Wer Tipps hat bitte melden. Da ich zu Testzwecken gern auch einmal den JSON Code direkt per Editor schreiben möchte.
 
Zuletzt bearbeitet:
Komisch, wenn ich die Datei im Ansi Format mit dem Editor erstelle und speichere, funktioniert auch alles. Speichere ich die Datei im UTF-8 Format, gibts Probleme mit file_get_contents.

Hmm nun gut. ^^
 
RTFM ;)
die meisten php-funktionen kennen kein UTF-8. Eine Lösung ist folgende:
Code:
function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

damit sollte es gehen.

Lg Kasalop
 
es ging um die file_get_contents methode... und nicht um json_decode... RTFP (Read The Fucking Post^^)

Lg Kasalop

EDIT: aber natürlich sollte er erstmal auf das OHNE BOM achten, falls er dies noch nicht getan hat.
 
Zuletzt bearbeitet:
Dann hab' ich dich falsch verstanden.

... aber file_get_contents kennt überhaupt keine Codierung, sondern liest einfach die Datei ein - Byte für Byte. Damit kannst du ja auch z.B. Bilddateien einlesen...

Egal - ich bin sowieso ziemlich sicher, dass es die BOM war, denn der Teststring enthielt gar keine Sonderzeichen.
 
Dann hab' ich dich falsch verstanden.

... aber file_get_contents kennt überhaupt keine Codierung, sondern liest einfach die Datei ein - Byte für Byte. Damit kannst du ja auch z.B. Bilddateien einlesen...

Egal - ich bin sowieso ziemlich sicher, dass es die BOM war, denn der Teststring enthielt gar keine Sonderzeichen.

auch wieder wahr ^^ na warten wirs mal ab :)
 
Mit UTF-8 ohne BOM funktioniert es. Ansi Format geht auch. Reines UTF-8 Format geht nicht.

file_put_contents() legt die Daten allerdings im ANSI Format ab. Hat man hier überhaupt Möglichkeiten die Datei im "UTF-8 ohne BOM" Format abzuspeichern?

Besten Dank nochmal :)
 
Zuletzt bearbeitet:
noch über eine einfache Testvariable ^^
später aus einem Formular -> dann über $_POST verarbeitet -> dann mittels file_put_contents als Datei mit JSON validem String abgespeichert.

um die Daten später über JQUERY per Ajax-Request wieder abrufen zu können.

da die PHP json Funktionen nur mit UTF-8 arbeiten muss ich mal schauen wie es sich verhält wenn meine PHP Klassen dafür fertig sind ^^
 
Zuletzt bearbeitet:
ok aber wenn ich mit file_put_contents() eine Datei speichere und ich diese mit Notepad ++ öffne, ist Notepad ++ im ANSI Modus. *schulterzuck* Das PHP Dokument ist in UTF-8 abgespeichert. Hmm. Ich probiere mal die Daten speziell vorher im UTF-8 Format zu konvertieren.
 
Zuletzt bearbeitet:
Notepad++ versucht beim Öffnen einer Datei zu erraten, welche Zeichenkodierung verwendet wird. Wenn nun kein Sonderzeichen in der Datei vorhanden ist, kann man UTF-8 und ISO-8859-... nicht unterscheiden und es wählt dann hald ANSI.
 
Zurück
Oben