Ich war bei meinen Recherchen darauf gestoßen, dass Zend einen eigenen JSON-Encoder bietet und hatte vermutet, dass der entsprechende Vorzüge gegenüber der eingebauten Low-Level-Funktion json_encode hat.
Das ist so nicht richtig.
Ich habe mir den Code von Zend Framework 2.3.1 noch einmal angesehen. Da wird intern standardmäßig json_encode aufgerufen, sofern die statische Klassenvariable Zend\Json\Json::$useBuiltinEncoderDecoder
nicht auf true gesetzt wird.
https://github.com/zendframework/zf2/blob/release-2.3.1/library/Zend/Json/Json.php#L40
https://github.com/zendframework/zf2/blob/release-2.3.1/library/Zend/Json/Json.php#L117-L125
Der Code für die manuelle Serialisierung von Strings, den tami gepostet hat, wird standardmäßig nicht aufgerufen. Ob das Zend Framework irgendwo $useBuiltinEncoderDecoder auf true setzt, weiß ich natürlich nicht.
Das führt mich dazu, dass das eingebaute json_encode das entsprechende Escaping vornimmt, wenn man denn nur die korrekten Options übergibt:
http://php.net/manual/en/function.json-encode.php
http://www.php.net/manual/en/json.constants.php
Zend macht hier letztlich nichts anderes als:
$encodedResult = json_encode(
$valueToEncode,
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
);
Der Zend-Json-Encoder macht noch mehr, aber wenn man nur diese Funktionalität will, braucht man die entsprechenden Module nun nicht einbinden.
Damit wäre das auch geklärt. :-)
Mathias