Lieber Rolf,
Geht man von einem Objekt oder assoziativen Array aus und serialisiert es mit json_encode(), ist der Fehler unmöglich. Einen Wert vom Typ Number mit Dezimalkomma gibt es in PHP nicht. Man erhält deswegen entweder
"47,11"oder47.11, die Mischform47,11ist ausgeschlossen.
wenn man aus 47,11 per str_replace() ein 47.11 macht, ist das kein Wert vom Typ Number, sondern noch immer ein String. Da wird auch json_encode() den Zahlenwert als String in seinen Anführungszeichen schreiben. Will man da „sauberes“ JSON erhalten, muss man das Ergebnis von str_replace() explizit in diesen Datentyp umwandeln. Entweder verwendet man dazu das Type-Casting $n = (float) str_replace(',', '.', $value);, oder eine passende Funktion wie floatval().
Liebe Grüße
Felix Riesterer