In den Changelogs steh ja folgendes
Ok, kein Problem. Auf den PHP-Seiten stehen ja diverse Möglichkeiten zur Verfügung (für utf8_decode() - utf8_encode() analog)
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
$iso8859_1_string = iconv('UTF-8', 'ISO-8859-1', $utf8_string);
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF8');
Dabei ist das primär genannte _ mb_convert_encoding()_ nicht ganz gleich, es bricht bei einem fehlerhaften ab, uft8_decode() nicht:
utf8_decode — Konvertiert eine Zeichenkette von UTF-8 nach ISO-8859-1 und ersetzt ungültige und nicht darstellbare Zeichen
Für ein ähnliches Verhalten stehen zur Verfügung
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']);
bzw.
$iso8859_1_string = iconv("UTF-8", "ISO-8859-1//IGNORE", $utf8_string);
Ist möglicherweise Haarspalterei, aber so ganz halt nicht, wenn man Strings konvertiert, die nicht garantiert utf8 sind.
Nur leider steht auf den PHP-Seiten auch:
Andere Optionen, die in Abhängigkeit von den installierten Erweiterungen verfügbar sein können, sind
Gibt es eine Präferenz? Was benutzt ihr?
das habe ich leider gar nicht richtig einsortieren können, versuche das mal für mich zu übersetzen.
Ich habe ein Modul, das via. MQTT-Client kommuniziert. Hiermit kommunizieren ich so:
$json = [
'DataID' => '{043EA491-0325-4ADD-8FC2-A30C8EEB4D3F}',
'PacketType' => 3,
'QualityOfService' => 0,
'Retain' => false,
'Topic' => $topic,
'Payload' => utf8_encode($payload)
];
parent::SendDataToParent(json_encode($json));
Bedeutet der o.g. Hinweis nun, ich muss statt utf8_encode() nun bin2hex() aufrufen?
Allerdings doch nur für IPS-Versionen ab 7. Sprich, wenn ich das Modul (einstweilen) noch für 6.x offen halten möchte, würde ich - abhängig von IPS_GetKernelVersion() - den leicht unterschiedlichen Code zur Kodierung von Payload verwenden würde.
Habe ich das richtig verstanden?
Danke