JSON Webhook gibt Umlaute als ? wider..

FreddyCollin

Ensign
Registriert
Dez. 2014
Beiträge
236
Hi ich wollte mit so einem App-Baukasten bzw einer App davon eine Webhook erstellen aber habe folgendes Problem:
Alle Umlaute werden mit einem Fragezeichen dargestellt. Sowohl wenn ich Webhook z.B. mit webhook.site teste oder auch mittel json_decode in einer php json dekodiere:

<?php


$pdo = new PDO('mysql:host=localhost;dbname=db1012461-eb;charset=utf8', 'user', 'passwort');



$input = file_get_contents('php://input');
$json = json_decode($input, true);


$neuer_ds = array();
$neuer_ds['smap_SendDate'] = $json['SendDate'];
$neuer_ds['smap_UserEmail'] = $json['UserEmail'];
$neuer_ds['inventar_nr'] = intval($json['DataFields'][1]['Value']);
$neuer_ds['inventar_bezeichnung'] = $json['DataFields'][2]['Value'];
$neuer_ds['inventar_typ'] = $json['DataFields'][3]['Value'];
$neuer_ds['inventar_hersteller'] = $json['DataFields'][4]['Value'];
$neuer_ds['standort_latitude'] = $json['DataFields'][5]['Latitude'];
$neuer_ds['standort_longitude'] = $json['DataFields'][5]['Longitude'];
$neuer_ds['standort_timestamp'] = $json['DataFields'][5]['Timestamp'];

$myLink = "https://www.google.de/maps?q=" . $json['DataFields'][5]['Latitude'] . "," . $json['DataFields'][5]['Longitude'];

$neuer_ds['standort_link'] = $myLink;
$neuer_ds['inventar_zustand'] = $json['DataFields'][6]['Value'];



//zuerst schauen, ob es bereits einen Datensatz für diese Inventar-Nr in der Tabelle inventar_standort gibt
//wenn ja, dann diesen Datensatz aktualisieren, ansonsten einen neunen Datensatz anlegen

$statement = $pdo->prepare("SELECT * FROM inventar_standort WHERE inventar_nr = ?");
$statement->execute(array(intval($json['DataFields'][1]['Value'])));
$anzahl_ds = $statement->rowCount();

if ($anzahl_ds > 0) {
//es gibt bereits einen Eintrag in der Tabelle mit dieser Inventar-Nr => Datensatz aktualisieren
$statement = $pdo->prepare("UPDATE inventar_standort SET smap_SendDate = :smap_SendDate, smap_UserEmail = :smap_UserEmail, inventar_bezeichnung = :inventar_bezeichnung, inventar_typ = :inventar_typ, inventar_hersteller = :inventar_hersteller, standort_latitude = :standort_latitude, standort_longitude = :standort_longitude, standort_timestamp = :standort_timestamp, standort_link = :standort_link, inventar_zustand = :inventar_zustand WHERE inventar_nr = :inventar_nr");
$statement->execute($neuer_ds);

} else {
//es gibt noch keinen Eintrag in der Tabelle mit dieser Inventar-Nr => neuen Datensatz anlegen
$statement = $pdo->prepare("INSERT INTO inventar_standort (inventar_nr, smap_SendDate, smap_UserEmail, inventar_bezeichnung, inventar_typ, inventar_hersteller, standort_latitude, standort_longitude, standort_timestamp, standort_link, inventar_zustand) VALUES (:inventar_nr, :smap_SendDate, :smap_UserEmail, :inventar_bezeichnung, :inventar_typ, :inventar_hersteller, :standort_latitude, :standort_longitude, :standort_timestamp, :standort_link, :inventar_zustand)");
$statement->execute($neuer_ds);
}



?>

Skript ist in UTF8 codiert..
Wenn ich die gleichen Daten direkt über die Swagger UI von der Plattform hole.. Dann gibts keine Fehler bei der Anzeige des JSON:
https://platform.smapone.com/backend/swagger/ui/index#!

Jemand eine Idee?
 
Ich bin jetzt kein PHP coder, aber in Java oder JSPs hatte ich ? statt Sonderzeichen immer dann wenn das encoding (charset) falsch war.
Welcher "content-type" wird im request des PHP übergeben?
Welchen "content-type" sendest du im HTTP response zurück?

für in deinen Kommentaren sieht für mich so aus als ob UTF-8 encoded text als ISO-8859-1(5) gelesen wurde, aber mit UTF-8 erneut gespeichert.
Später nochmals mit falschen encoding (ISO) geöffnet aber erneut als UTF-8 gespeichert wurde.

Ist der Inhalt der gelesenen Daten nach $input = file_get_contents('php://input'); OK?
Hast du folgendes versucht?
json_encode( $input, JSON_UNESCAPED_UNICODE );

Leider habe ich keine PHP Erfahrung, aber ich kenne solche Probleme mit falschem encoding zu genüge, möglicherweise hilft dir eine meiner Fragen.
 

Ähnliche Themen

Zurück
Oben