Hi!
Seit ich mit IPS arbeite (sind schon ein paar Jahre), ärgere ich mich mit dem Thema Umlaute/Sonderzeichen rum. Jetzt war es mal wieder soweit. Seit über 3 Stunden versuche ich das Problem in den Griff zu bekommen - keine Chance…
Alle Dateien vom Modul sind mit UTF-8 Kodierung gespeichert und das Test-System hat als Locale „de_DE.UTF-8“.
In der Instanz eines Moduls ist ein Textfeld, dort trage ich z.B. ein (landet dann später in $notificationText):
„Der Host -§HOST- mit Adresse -§ADRESSE- ist seit §ZEITMIN Minuten nicht mehr erreichbar“
Im Debug kommen die verschiedensten Ausgaben (aber niemals alle „Variablen“ korrekt ersetzt), je nachdem was ich von diesen Versuchen aktiviere (auch in verschiedenen Kombinationen):
$notificationText = mb_convert_encoding($notificationText, "UTF-8", "auto");
//$notificationText = utf8_encode($notificationText);
//$notificationText = utf8_decode($notificationText);
//$notificationText = str_replace(chr(195), '', $notificationText);
//$notificationText = str_replace(chr(194), '', $notificationText);
Mein Modul macht z.B. folgendes:
$search = array('§HOST', '§ADRESSE', '§ZEITSEK', '§ZEITMIN', '§ZEITSTD', '§ZEITTAGE');
$this->SendDebug('TEST-111', json_encode($search), 0);
$replace = array($hostName, $hostAddress, $lastOnlineTimeDiffSEC, $lastOnlineTimeDiffMIN, $lastOnlineTimeDiffHOURS, $lastOnlineTimeDiffDAYS);
$Text = str_replace($search, $replace, $notificationText);
$this->SendDebug('TEST-222', json_encode($search), 0);
Die Ausgaben im Debug (egal ob Legacy- oder Web-Console) sieht dann z.B. wie folgt aus:
Test-111 = ["\u00a7HOST","\u00a7ADRESSE","\u00a7ZEITSEK","\u00a7ZEITMIN","\u00a7ZEITSTD","\u00a7ZEITTAGE"]
Test-222 = ["\u00a7HOST","\u00a7ADRESSE","\u00a7ZEITSEK","\u00a7ZEITMIN","\u00a7ZEITSTD","\u00a7ZEITTAGE"]
Text = Der Host -192.168.10.11- mit Adresse -§ADRESSE- ist seit §ZEITMIN Minuten nicht mehr erreichbar
Das ist die best mögliche Variante die ich hin bekomme - aber warum wird nur die erste „Variable“ korrekt ersetzt und bei den beiden anderen tauchen auf einmal komische Zeichen auf, obwohl eine Zeile davor das Json alle „Variablen“ identisch anzeigt???
Mache ich das ganze im gleichen IPS in einem Skript, dann ist alles normal:
<?php
$test = "YYY";
$hostName = "ServerXY";
$hostAddress = "192.168.1.1";
$lastOnlineTimeDiffSEC = 60;
$lastOnlineTimeDiffMIN = 1;
$lastOnlineTimeDiffHOURS = 0;
$lastOnlineTimeDiffDAYS = 0;
$notificationText = "TEST: §XXX // Der Host -§HOST- mit Adresse -§ADRESSE- ist seit §ZEITMIN Minuten nicht mehr erreichbar";
var_dump(json_encode($notificationText));
$search = array('§XXX', '§HOST', '§ADRESSE', '§ZEITSEK', '§ZEITMIN', '§ZEITSTD', '§ZEITTAGE');
$replace = array($test, $hostName, $hostAddress, $lastOnlineTimeDiffSEC, $lastOnlineTimeDiffMIN, $lastOnlineTimeDiffHOURS, $lastOnlineTimeDiffDAYS);
$text = str_replace($search, $replace, $notificationText);
var_dump($text);
Die Ausgabe ist wie zu erwarten:
string(125) „„TEST: \u00a7XXX // Der Host -\u00a7HOST- mit Adresse -\u00a7ADRESSE- ist seit \u00a7ZEITMIN Minuten nicht mehr erreichbar““
string(99) „TEST: YYY // Der Host -ServerXY- mit Adresse -192.168.1.1- ist seit 1 Minuten nicht mehr erreichbar“
Ich weiß nicht mehr weiter…mehr als eine „Variable“ bekomme ich im Modul nicht ersetzt…
Damit die User nichts am Modul ändern müssen beim Update, muss ich auch beim „§“ als „Erkennungszeichen“ bleiben.
Bin für jeden Tipp dankbar!
Viele Grüße,
Chris