Ja, Core-Hacking ist natürlich schlecht.

Was hast du an der Methode geändert?

Kind regards
Steffen

--
Steffen Gebert
TYPO3 v4 Core Team Member
TYPO3 Server Administration Team Member

TYPO3 .... inspiring people to share!
Get involved: http://typo3.org

I work for TYPO3 solely in my spare time. If you think that
my work helps you running your business, you are invited to
send me a donation via PayPal to this email address. Thanks


Am 7/5/12 7:26 AM, schrieb Gerald Draxler:
Hallo Steffen.

Haben einen Workaround für dieses Problem gefunden.

Haben in der class.typo3ajax.php die Methode __json_encode() mit dieser hier 
ersetzt.

function __json_encode( $data ) {
   if( is_array($data) || is_object($data) ) {
     $islist = is_array($data) && ( empty($data) || array_keys($data) === 
range(0,count($data)-1) );

     if( $islist ) {
       $json = '[' . implode(',', array_map('__json_encode', $data) ) . ']';
     } else {
       $items = Array();
       foreach( $data as $key => $value ) {
         $items[] = __json_encode("$key") . ':' . __json_encode($value);
       }
       $json = '{' . implode(',', $items) . '}';
     }
   } elseif( is_string($data) ) {
     # Escape non-printable or Non-ASCII characters.
     # I also put the \\ character first, as suggested in comments on the 
'addclashes' page.
     $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
     $json    = '';
     $len    = strlen($string);
     # Convert UTF-8 to Hexadecimal Codepoints.
     for( $i = 0; $i < $len; $i++ ) {
       $char = $string[$i];
       $c1 = ord($char);

       # Single byte;
       if( $c1 <128 ) {
         $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1);
         continue;
       }

       # Double byte
       $c2 = ord($string[++$i]);
       if ( ($c1 & 32) === 0 ) {
         $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
         continue;
       }

       # Triple
       $c3 = ord($string[++$i]);
       if( ($c1 & 16) === 0 ) {
         $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + 
($c3 - 128));
         continue;
       }

       # Quadruple
       $c4 = ord($string[++$i]);
       if( ($c1 & 8 ) === 0 ) {
         $u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;

         $w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);
         $w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
         $json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
       }
     }
   } else {
     # int, floats, bools, null
     $json = strtolower(var_export( $data, true ));
   }
   return $json;
}

Jetzt klappt es wieder. Ist zwar nicht die beste Lösung, weil wir bei jedem 
Typo3 update jetzt auch schauen müssen, ob der Extension Manager noch 
funktioniert.

Vielleicht fällt dir etwas besseres ein!

lg Gerald


-------- Original-Nachricht --------
Datum: Wed, 04 Jul 2012 09:23:35 +0200
Von: Steffen Gebert <steffen.geb...@typo3.org>
An: typo3-german@lists.typo3.org
Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem

Hallo Gerald,

kannst du darauf mal ein json_encode() machen und schaun, wo es
abgeschnitten wird?

Kind regards
Steffen

--
Steffen Gebert
TYPO3 v4 Core Team Member
TYPO3 Server Administration Team Member

TYPO3 .... inspiring people to share!
Get involved: http://typo3.org

I work for TYPO3 solely in my spare time. If you think that
my work helps you running your business, you are invited to
send me a donation via PayPal to this email address. Thanks


Am 6/28/12 9:42 AM, schrieb Gerald Draxler:
Hallo Steffen.
Erstmal vielen Dank für deine Hilfe!

$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';
$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';

wenn ich $this->content ausgebe bekomme ich beim Aufruf der verfügbaren
Extensions folgendes array zurück:

Array
(
      [0] => Array
          (
              [tid] => 7
              [action] => ExtDirect
              [method] => setState
              [type] => rpc
              [result] => Array
                  (
                      [success] => 1
                      [params] => stdClass Object
                          (
                              [scope] => stdClass Object
                                  (
                                      [events] => stdClass Object
                                          (
                                              [savefailure] => 1
                                              [savesuccess] => 1
                                              [readfailure] => 1
                                              [readsuccess] => 1
                                              [statechange] => 1
                                          )

                                      [state] => stdClass Object
                                          (
                                              [mainTab] => stdClass
Object
                                                  (
                                                      [activeTab] => 1
                                                  )

                                              [LocalList] => stdClass
Object
                                                  (
                                                      [columns] => Array
                                                          (
                                                              [0] =>
stdClass Object
                                                                  (

[id] => 0

[width] => 20

[sortable] => 1
                                                                  )

                                                              [1] =>
stdClass Object
                                                                  (

[id] => 1

[width] => 47

[sortable] => 1
                                                                  )

                                                              [2] =>
stdClass Object
                                                                  (

[id] => 2

[width] => 744

[sortable] => 1
                                                                  )

                                                              [3] =>
stdClass Object
                                                                  (

[id] => 3

[width] => 397

[sortable] => 1
                                                                  )

                                                              [4] =>
stdClass Object
                                                                  (

[id] => 4

[width] => 347

[hidden] => 1

[sortable] => 1
                                                                  )

                                                              [5] =>
stdClass Object
                                                                  (

[id] => 5

[width] => 596

[hidden] => 1

[sortable] => 1
                                                                  )

                                                              [6] =>
stdClass Object
                                                                  (

[id] => 6

[width] => 248

[hidden] => 1

[sortable] => 1
                                                                  )

                                                              [7] =>
stdClass Object
                                                                  (

[id] => 7

[width] => 100

[sortable] => 1
                                                                  )

                                                          )

                                                      [sort] => stdClass
Object
                                                          (
                                                              [field] =>
title
                                                              [direction]
=> DESC
                                                          )

                                                      [group] => category
                                                      [filters] =>
stdClass Object
                                                          (
                                                          )

                                                  )

                                              [em-languagegrid] =>
stdClass Object
                                                  (
                                                      [columns] => Array
                                                          (
                                                              [0] =>
stdClass Object
                                                                  (

[id] => checker

[width] => 20
                                                                  )

                                                              [1] =>
stdClass Object
                                                                  (

[id] => lang-label

[width] => 103

[sortable] => 1
                                                                  )

                                                              [2] =>
stdClass Object
                                                                  (

[id] => lang-key

[width] => 103

[sortable] => 1
                                                                  )

                                                          )

                                                      [sort] => stdClass
Object
                                                          (
                                                              [field] =>
label
                                                              [direction]
=> ASC
                                                          )

                                                  )

                                          )

                                      [delay] => 750
                                      [dirty] =>
                                      [started] => 1
                                      [autoStart] => 1
                                      [autoRead] =>
                                      [key] => moduleData.tools_em.States
                                      [logFailure] =>
                                      [logSuccess] =>
                                      [queue] => Array
                                          (
                                              [0] => stdClass Object
                                                  (
                                                      [name] => mainTab
                                                      [value] => stdClass
Object
                                                          (
                                                              [activeTab]
=> 0
                                                          )

                                                  )

                                          )

                                      [saveBaseParams] => stdClass Object
                                          (
                                          )

                                      [readBaseParams] => stdClass Object
                                          (
                                          )

                                      [paramNames] => stdClass Object
                                          (
                                              [key] => key
                                              [name] => name
                                              [value] => value
                                              [data] => data
                                          )

                                      [dt] => stdClass Object
                                          (
                                          )

                                  )

                              [queue] => Array
                                  (
                                      [0] => stdClass Object
                                          (
                                              [name] => mainTab
                                              [value] => stdClass Object
                                                  (
                                                      [activeTab] => 0
                                                  )

                                          )

                                  )

                              [params] => stdClass Object
                                  (
                                      [key] => moduleData.tools_em.States
                                      [data] =>
[{"name":"mainTab","value":{"activeTab":0}}]
                                  )

                          )

                  )

              [debug] =>
          )

)


-------- Original-Nachricht --------
Datum: Thu, 28 Jun 2012 08:53:28 +0200
Von: Steffen Gebert <steffen.geb...@typo3.org>
An: typo3-german@lists.typo3.org
Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hallo Gerald,

okay, die Stelle hatte ich mir schon angeschaut. Nur der Rückgabewert
wird da eben nicht weiter geprüft, aber das Ergebnis scheint jetzt
tatsächlich anders zu sein.

protected function renderAsJSON() {
                // If the backend does not run in UTF-8 then we need to convert 
it
to
unicode as
                // the json_encode method will return empty otherwise
        if ($this->charset != $this->requestCharset) {
                $GLOBALS['LANG']->csConvObj->convArray($this->content,
$this->charset,
$this->requestCharset);
        }

        $content = json_encode($this->content);

Ich würde mal vermuten, dass dein System nicht korrekt konifguiert
ist.
Was hast du für $TYPO3_CONF_VARS['BE']['forceCharset'] sowie bei
DBinit?

Du könntest auch mal den Wert von $this->content direkt ausgeben
lassen
(und dann zB über Firebug die Ausgabe des AJAX-calls begutachten).
Dann
wüssten wir jedenfalls, woher der falsch kodierte Inhalt kommt.

Kind regards
Steffen

- --
Steffen Gebert
TYPO3 v4 Core Team Member
TYPO3 Server Administration Team Member

TYPO3 .... inspiring people to share!
Get involved: http://typo3.org

I work for TYPO3 solely in my spare time. If you think that
my work helps you running your business, you are invited to
send me a donation via PayPal to this email address. Thanks

On 28.06.12 08:35, Gerald Draxler wrote:
Hier das gesamte Feedback von unserem Hoster:

"wir konnten den Fehler auf ein Versionsupdate von PHP 5.3.13 auf
5.3.14
zurückführen, das am Freitag vorgenommen wurde.

Ein Trace Ihrer PHP-Prozesse liefert:

write(4, "o\1\0\0\3INSERT INTO sys_log
(userid,type,action,error,details_nr,details,IP,tstamp,workspace)
VALUES
('5','5','0','1','0','Core: Error handler (BE): PHP Warning:
json_encode() [<a
href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
UTF-8
sequence in argument in
/usr/www/users/standm/typo3/classes/class.typo3ajax.php
line 275','80.150.215.98','1340635563','0')", 371) = 371 read(4,
"\t\0\0\1\0\1\374%\2\2\0\0\0", 16384) = 13

Hier wird folgende Fehlermeldung ins Typo3 Datenbank-Log geschrieben:
Core: Error handler (BE): PHP Warning: json_encode() [<a
href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
UTF-8
sequence in argument in
/usr/www/users/standm/typo3/classes/class.typo3ajax.php
line 275

Dieser Fehler hängt höchstwahrscheinlich mit folgender Änderung
zusammen, die das PHP Entwicklerteam in Version 5.3.14 vorgenommen hat:

- JSON: Fixed bug #61537 (json_encode() incorrectly truncates/discards
information)

Changelog einzusehen unter: http://www.php.net/ChangeLog-5.php
Link zum entsprechenden PHP-Bugreport: http://bugs.php.net/61537

Im Klartext heißt das, dass die PHP-Funktion json_encode() bei
fehlerhaftem Input nun NULL statt false zurückliefert, dies bringt
offenbar Ihren
Erweiterungsmanager durcheinander - an die entsprechende Funktion wurde
bereits vor dem Update wohl fehlerhaft codierter UTF-8 Input
übergeben, die
Funktion überging dies aber (inkorrekter Weise), indem Sie einfach
NULL
zurücklieferte - nun wird aber false zurückgegeben und ein
Typo3-Fehler
ausgelöst.

Korrekter Weg, dies zu lösen wäre aus unserer Sicht, den
fehlerhaften
Input zu vermeiden, stellt sich die Frage, woher dieser Input stammt,
vermutlich aus Ihrer Datenbank - ohne die Typo3-Sourcen zu debuggen
können wir
dies aber nicht feststellen."


Sie haben von der Tabelle sys_log den Fehler entnommen und dieser wir
eingetragen (wie schon weiter unten erwähnt), wenn der
Extension-Manager
aufgerufen wird.

Beste Grüße


-------- Original-Nachricht --------
Datum: Wed, 27 Jun 2012 17:10:56 +0200
Von: Steffen Gebert <steffen.geb...@typo3.org>
An: typo3-german@lists.typo3.org
Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem

Ja, soweit hab ich das schon verstanden, nur versteh ich noch nicht,
wo
die fehlerhafte Stelle im Code sein soll.

Kind regards
Steffen

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJP6/9oAAoJEIskG/rSlyw4Nv0IAKb2lrYGFit6nJ0ktsSgVyUm
1tAezaSxTonLLyJEeXtqAOJgFOCHwg/dxOsMjRaGtnqad18C3PHntjY65xq9My/1
PYCL6T6MLdDt41L96cPu1sBp+cTcsVjkr9Pca/0X/D3LTn8VneBa47x3KVWIr+G4
/trBu05mhfa2N6bX4VPHkxrT3i8y4bNdKwG4Yh5BRfes8h4JrwRUifEhzsa4T+KO
1Al+9hApjcvk05Z2k+x/iB9g25/gDOa5OBUJB5c46L1PT2JzgZDJRHAbrLS34cWt
VUttCRalW7LyXMGBFpBcnwDgwpVgIU+UB3+RxDJqoZallAA+mOCC+Lfivhbc5sg=
=ZY24
-----END PGP SIGNATURE-----
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an