ID:               38657
 Updated by:       [EMAIL PROTECTED]
 Reported By:      tom at ideaweb dot de
-Status:           Feedback
+Status:           Closed
 Bug Type:         WDDX related
 Operating System: Debian, OSX
 PHP Version:      4.4.4
 New Comment:

Fixed -> closed.


Previous Comments:
------------------------------------------------------------------------

[2006-08-30 13:53:38] werner at esmt dot org

i did and it works for my test case on my mac and it seems there are no
problems with my linux server too :)

but the behaviour of ex. german 'umlaute' changed from

<var name="DATA_bbbbbbb">
 <string>bbbb&#228;bbBBB</string>
</var>

to

<var name="DATA_bbbbbbb">
 <string>bbbb<char code="E4" />bbBBB</string>
</var>

but its my problem...

did you know when i can expect the next php4 version? i feel not safe
with a snapshot on my production machine...

thx a lot, thomas

------------------------------------------------------------------------

[2006-08-30 12:34:35] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip



------------------------------------------------------------------------

[2006-08-30 12:32:34] tom at ideaweb dot de

Description:
------------
I have a small cms which works over year, but with the upgrade from
php-4.4.2 on Debian Sarge to php-4.4.4 wddx does not work anymore. I go
back to the old version and it works. I used the same configuration
script for both php versions.

The problem is, its not easy for me as an admin to find the right
portion of code, but tried to reproduce this on my mac, not linux,
because its a production machine. i got malformed wddx output with my
show() method. on my linux machine the wddx output was empty.

i hope it helps and i made no mistakes :)

Reproduce code:
---------------
<?php
        function ideacms_isutf8( $pString, $pComp = false ) {/*{{{*/

                if( !$pComp ) {
                        return preg_match( '%^(?:
                                [\x09\x0A\x0D\x20-\x7E]             # ASCII
                                | [\xC2-\xDF][\x80-\xBF]            # 
non-overlong 2-byte
                                |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding 
overlongs
                                | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 
3-byte
                                |  \xED[\x80-\x9F][\x80-\xBF]       # excluding 
surrogates
                                |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                                | [\xF1-\xF3][\x80-\xBF]{3}         # planes 
4-15
                                |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                                )*$%xs', $pString
                        );
                }

                //if( utf8_encode( utf8_decode( $pString ) ) == $pString ) {
                if( iconv( 'ISO-8859-1', 'UTF-8', iconv( 'UTF-8', 'ISO-8859-1',
$pString ) ) == $pString ) {
                        return true;
                }
                return false;
        }/*}}}*/

        Class CMS_WDDX
        {
                var $name;
                var $packet;
        
                function CMS_WDDX( $pName ) {/*{{{*/
        
                        $this->name = $pName;
                        $this->packet = wddx_packet_start( $pName );
                }/*}}}*/
        
                function setVar( $pName, $pValue, $pOrd = false ) {/*{{{*/
                
                        eval( "\$$pName = \$this->entities(\$pValue, \$pOrd);" 
);
                        
                        wddx_add_vars( $this->packet, $pName );
                        
                }/*}}}*/
                
                function show() {/*{{{*/
                
                        //var_dump( wddx_packet_end( $this->packet ) );exit;

                        if( !$this->packet ) return false;
        
                        return wddx_packet_end( $this->packet );
                }/*}}}*/
        
                function entities( $pString, $pOrd = false ) {/*{{{*/
        
                        if ( is_array( $pString ) ) {
                                foreach( $pString as $key => $value ) {
                                        $pString[$key] = CMS_WDDX::entities( 
$pString[$key], $pOrd );
                                }
                        }
                        elseif ( is_string( $pString ) ) {
                                
                                if( strpos( phpversion(), '4' ) === 0 ) {
                                
                                        if ( $pOrd === true ) {
                                                
                                                if ( ideacms_isutf8( $pString ) 
) {
                                                        if( $pTemp = 
@utf8_decode( $pString ) ) {
                                                                $pString = 
$pTemp;
                                                        }
                                                }
                                        
                                                $pString = 
CMS_WDDX::unentities( $pString );
                                        
                                                $temp = htmlspecialchars( 
$pString, ENT_NOQUOTES );
                
                                                $pString = '';
                        
                                                for( $i = 0; $i < strlen( $temp 
); $i++ ) {
                        
                                                        $ord = ord($temp{$i});
                        
                                                        if($ord >= 126){
                                                                $pString .= 
"&#".$ord.";";
                                                        }
                                                        else {
                                                                switch($ord){
                                                                        case 34 
:
                                                                                
$pString .= '"';
                                                                                
break;
                                                                        case 39 
: 
                                                                                
$pString .= "'";
                                                                                
break;
                                                                        case 92 
: 
                                                                                
$pString .= "\\";
                                                                                
break;
                                                                        default 
: 
                                                                                
$pString .= $temp{$i};
                                                                }
                                                        }
                                                }
                                        }
                                }
                                else {
                                        
                                        $pString = CMS_WDDX::convert( $pString 
);
                                
                                        //$pString = CMS_WDDX::unentities( 
$pString );
                                        
                                        //$pString = htmlspecialchars( 
$pString, ENT_NOQUOTES );
                                }
                        }
                        return $pString;
        
                }/*}}}*/
        
                function unentities( $pString ) {/*{{{*/
        
                        if ( is_array( $pString ) ) {
                                foreach( $pString as $key => $value ) {
                                        $pString[$key] = CMS_WDDX::unentities( 
$pString[$key] );
                                }
                        }
                        elseif ( is_string( $pString ) ) {
                                
                                $pString = ideacms_unentities( $pString, ( 
isset(
$GLOBALS['ideacms_template_init'] ) ? false : true ) );
                        }
                        return $pString;
        
                }/*}}}*/
                
                function convert( $pString ) {/*{{{*/
                
                        #return $pString;
                        
                        if ( is_array( $pString ) ) {
                                foreach( $pString as $key => $value ) {
                                        $pString[$key] = CMS_WDDX::convert( 
$pString[$key] );
                                }
                        }
                        elseif ( is_string( $pString ) ) {
                        
                                if( !ideacms_isutf8( $pString ) ) {
                                        if( $pTemp = @utf8_encode( $pString ) ) 
{
                                                $pString = $pTemp;
                                        }
                                }
                        }
                        
                        return $pString;
                        
                }/*}}}*/
                
                function unconvert( $pString ) {/*{{{*/
                
                        return $pString; 
                        
                }/*}}}*/
        
        }
        $w = new CMS_WDDX( 'test' );
        $w->setVar( "test", "1234567890123456" );

        echo "<pre>";
        echo ( $w->show() );
        echo "</pre>";
?>

Expected result:
----------------
<pre><wddxPacket
version='1.0'><header><comment>test</comment></header><data><struct><var
name='test'><string>1234567890123456</string></var></struct></data></wddxPacket></pre>

Actual result:
--------------
<pre><wddxPacket
version='1.0'><header><comment>test</comment></header><data><struct><va<string>1234567890123456</string></var></struct></data></wddxPacket></pre>


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=38657&edit=1

Reply via email to