[Vtigercrm-commits] [vtiger development] #7028: UTF-8 display error on the vtiger 5.2.1 Dashboard diagrams

vtiger development vtiger-tickets at trac.vtiger.com
Sat Feb 26 08:46:14 PST 2011


#7028: UTF-8 display error on the vtiger 5.2.1 Dashboard diagrams
------------------------------+---------------------------------------------
 Reporter:  holbi             |       Owner:  developer 
     Type:  defect            |      Status:  new       
 Priority:  minor             |   Milestone:  Unassigned
Component:  vtigercrm         |     Version:  5.2.1     
 Keywords:  dashboard, UTF-8  |  
------------------------------+---------------------------------------------
 There is a display error on the vtiger 5.2.1. Dashboard. The UTF-8
 characters were changed into a rectangular place-holder.[[BR]]
 See picture 1.[[BR]]
 The reason of this display error was the internal bug of ImageTTFText()
 function in \Image\Canvas\GD.php file about the line 1405.[[BR]]
 The solution was already developed:[[BR]]
 [http://hu.php.net/manual/en/function.imagettfbbox.php] (post by
 Nashev)[[BR]]
 [http://php.rinet.ru/manual/ru/function.imagettftext.php#57416] [[BR]]
 By adding the function described below to the \Image\Canvas\GD.php file
 (to the Image_Canvas_GD Class) the problem is solved.[[BR]]
 [[BR]]
     #UTF8 - Character support on the charts
     function foxy_utf8_to_nce( $utf )
     {
       if($utf == '')
       {
         return($utf);
       }
       else
       {
         $max_count = 5; // flag-bits in $max_mark ( 1111 1000 == 5 times
 1)
         $max_mark = 248; // marker for a (theoretical ;-)) 5-byte-char and
 mask for a 4-byte-char;

         $html = '';
         for($str_pos = 0; $str_pos < strlen($utf); $str_pos++)
         {
             $old_chr = $utf{$str_pos};
             $old_val = ord( $utf{$str_pos} );
             $new_val = 0;

             $utf8_marker = 0;

             // skip non-utf-8-chars
             if( $old_val > 127 )
             {
                 $mark = $max_mark;
                 for($byte_ctr = $max_count; $byte_ctr > 2; $byte_ctr--)
                 {
                     // actual byte is utf-8-marker?
                     if( ( $old_val & $mark  ) == ( ($mark << 1) & 255 ) )
                     {
                         $utf8_marker = $byte_ctr - 1;
                         break;
                     }
                     $mark = ($mark << 1) & 255;
                 }
             }

             // marker found: collect following bytes
             if($utf8_marker > 1 and isset( $utf{$str_pos + 1} ) )
             {
                 $str_off = 0;
                 $new_val = $old_val & (127 >> $utf8_marker);
                 for($byte_ctr = $utf8_marker; $byte_ctr > 1; $byte_ctr--)
                 {

                     // check if following chars are UTF8 additional data
 blocks
                     // UTF8 and ord() > 127
                     if( (ord($utf{$str_pos + 1}) & 192) == 128 )
                     {
                         $new_val = $new_val << 6;
                         $str_off++;
                         // no need for Addition, bitwise OR is sufficient
                         // 63: more UTF8-bytes; 0011 1111
                         $new_val = $new_val | ( ord( $utf{$str_pos +
 $str_off} ) & 63 );
                     }
                     // no UTF8, but ord() > 127
                     // nevertheless convert first char to NCE
                     else {
                         $new_val = $old_val;
                     }
                 }
                 // build NCE-Code
                 $html .= '&#'.$new_val.';';
                 // Skip additional UTF-8-Bytes
                 $str_pos = $str_pos + $str_off;
             }
             else {
                 $html .= chr($old_val);
                 $new_val = $old_val;
             }
         }
         return($html);
       }
     }


 Changing the line 1405 - 1414 the problem is solved:

                     ImageTTFText(
                         $this->_canvas,
                         $this->_font['size'],
                         $this->_font['angle'],
                         $x,
                         $y,
                         $this->_color($color),
                         $this->_font['file'],
 //                        $line
                         Image_Canvas_GD::foxy_utf8_to_nce($line)  //for
 UTF-8 support
                     );[[BR]]
 See the picture2

-- 
Ticket URL: <http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/7028>
vtiger development <http://trac.vtiger.com/>
vtigerCRM



More information about the vtigercrm-commits mailing list