<![CDATA[ Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7) - My Forums]]> https://forums.modx.com/thread/?thread=98775 <![CDATA[Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-534135 Установил себе wamp 2.5, развернул на нем modx 2.4.2, но возникла проблема при попытке установить пакеты, их список был пуст.
В консоли Chrome появлялось сообщение об ошибке вида:
"Uncaught SyntaxError: Unexpected token }"
в
Ext.util.JSON.doDecode @ ext-all.js:21
после запроса:
/connectors/index.php с параметром action:workspace/packages/rest/getList
ответ:
{"success":true,"total":"471","results":}

у свойства "results" отсутствуют данные, что и вызвало ошибку декодирования JSON.

Копаясь глубже, было выяснено, что это все происходит в файл \core\xpdo\xpdo.xpdo.class.php:2378 в методе toJSON
В строке $encoded= json_encode($array); массив $array не пустой, однако, в $encoded содержится NULL.
Результат вызова json_last_error_msg() после json_encode вернул:
'Malformed UTF-8 characters, possibly incorrectly encoded'

Было обнаружено, что в массиве $array присутствовали элементы со значениями [releasedon] => ��� 09, 2014, однако, даты других полей, например: [createdon] => 2014-12-09T05:31:41+0000 или [editedon] => 2015-11-05T08:53:13+0000 в нормальном формате.

При использовании библиотеки JSON в поставке modx, которая подключается в случае отсутствия расширения json для php, данной ошибки не возникает, однако, дата releasedon отображается как ?003f003f 29, 2015, что, собственно, логично, ибо дата заведомом битая.
Кто сталкивался с такими проблемами или есть решения подобной проблемы, ведь эти данные приходят с репозитория modx.com?]]>
[email protected] Nov 07, 2015, 01:33 PM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-534135
<![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547650
    public static function arrayEncodeUTF8($array){

        if(is_array($array)){
            foreach($array as $key => $value){
                if(!is_array($value) && is_string($value)){
                    json_encode($value);
                    if(json_last_error() == 5){
						$enc = mb_detect_encoding($value);
                        $array[$key] = iconv($enc, 'UTF-8', $value);
                    }
                }
                if(is_array($value)){
                    $array[$key] = self::arrayEncodeUTF8($value);
                }
            }
        }

		if(is_string($array)){
			json_encode($array);
			if(json_last_error() == 5){
				$enc = mb_detect_encoding($array);
				return iconv($enc, 'UTF-8', $array);
			}
		}

        return $array;
    }

P.S Расположение в файле /core/xpdo/xpdo.class.php
]]>
godyrev Dec 28, 2016, 01:47 PM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547650
<![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547643 MODX установлен на OpenServer, Apache 2.4, PHP 5.6.]]> snjor hv Dec 28, 2016, 06:12 AM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547643 <![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547588 v.shaganian Dec 23, 2016, 02:42 PM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-547588 <![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-540082

As it is not in english, the problem solved here is about a incorrect json return in ext-js when trying to get packages through the package manager...
This problem occurs on a WAMP environment.

To fix the problem, this excellent patch given above fixed it for me...
this fix should be set in the file \core\xpdo\xpdo.xpdo.class.php:2378

Thanks godyrev for your fix...]]>
intersel Mar 31, 2016, 03:41 PM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-540082
<![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-535903 PHP >= 5.5
Добавил метод ниже toJSON и массив прогоняю через этот метод, прежде чем передать функции json_encode

    /**
     * Converts a PHP array into a JSON encoded string.
     *
     * @param array $array The PHP array to convert.
     * @return string The JSON representation of the source array.
     */
    public function toJSON($array) {
        $encoded= '';
        if (is_array ($array)) {
            if (!function_exists('json_encode')) {
                if (@ include_once (XPDO_CORE_PATH . 'json/JSON.php')) {
                    $json = new Services_JSON();
                    $encoded= $json->encode($array);
                }
            } else {

                $array = self::arrayEncodeUTF8($array);

                $encoded= json_encode($array);

            }
        }
        return $encoded;
    }

    public static function arrayEncodeUTF8($array){

        foreach($array as $key => $value){
            if(!is_array($value) && is_string($value)){
                json_encode($value);
                if(json_last_error() == 5){
                    $array[$key] = iconv('CP1251', 'UTF-8', $value);
                }
            } else {
                $array[$key] = self::arrayEncodeUTF8($value);
            }
        }
        return $array;
    }
]]>
godyrev Dec 15, 2015, 02:17 AM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-535903
<![CDATA[Re: Ошибка при отображении пакетов для установки (modx 2.4.2, Wamp 2.5, w7)]]> https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-535466 sgitas Dec 06, 2015, 04:00 PM https://forums.modx.com/thread/98775/modx-2-4-2-wamp-2-5-w7#dis-post-535466