* This file is part of the ManageWP Worker plugin.
* (c) ManageWP LLC <contact@managewp.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
class MWP_Http_JsonResponse extends MWP_Http_Response
public function __construct($content, $statusCode = 200, array $headers = array())
$headers['content-type'] = 'application/json';
parent::__construct($content, $statusCode, $headers);
public function getContentAsString()
$content = json_encode($this->content);
if (!is_string($content)) {
$invalidValues = array();
$this->fixUtf8($this->content, $invalidValues);
if (is_array($this->content) && count($invalidValues) > 0) {
$this->content['utf8FixedPaths'] = $invalidValues;
$content = json_encode($this->content);
private function fixUtf8(&$structure, array &$found = array(), &$walkedRefs = array(), array $path = array('_'))
switch ($type = gettype($structure)) {
if (!seems_utf8($structure)) {
$found[implode('.', $path)] = urlencode($structure);
$structure = utf8_encode($structure);
/** @noinspection PhpMissingBreakStatementInspection */
// __PHP_Incomplete_Class will return false on is_object() call. Luckily, we can still get its object hash.
$objectHash = spl_object_hash($structure);
if (isset($walkedRefs[$objectHash])) {
$walkedRefs[$objectHash] = true;
// Object and array are by default traversable.
foreach ($structure as $key => &$value) {
$this->fixUtf8($value, $found, $walkedRefs, $valuePath);