Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > [UTF8->Win]Проблема с кодировкой


Автор: maugli 7.11.2007, 22:00
Здраствуйте, не буду писать полностью вопрос т.к. обсуждается в другом форуме.
ссылка вот http://forum.woweb.ru/topic32307.html
Помогите пожалуйста решить проблему.
Извините если не правильно что-то сделал по отношению к создании темы.
Спасибо.

Автор: skyboy 7.11.2007, 22:38
будь добр, набросай основные тезисы проблемы. возможно, не каждый сможет(да и захочет) куда-то ещё идти и определять по теме, что уже получилось, а что - нет. 
а тему можно было бы назвать инфорамтивнее. Например
Цитата

Преобразовать "&#1101&#1090&#1086 &#105s" в "это is"
сращу и пример, и понятно, где именно проблемы с кодировкой...


Добавлено через 3 минуты и 37 секунд
maugli, я так понял, тебе не хватило окончательной и рабочей регулярки для замены - и все?

Автор: maugli 7.11.2007, 22:50
skyboy, Извини smile назвал как смог
По поводу регулярки ты прав, если есть идеи напиши пожалуйста, буду очень благодарен.
А может там не только в регулярке дело, я уже запутался просто.
Спасибо.

Автор: Sannis 8.11.2007, 10:49
Могу привести как это реализовано в IPB, там есть что-то лишнее наверняка, но соответствия точно верные в первой функции. Надеюсь это вам поможет:
Код

    /*-------------------------------------------------------------------------*/
    // Convert decimal character references to UTF-8
    /*-------------------------------------------------------------------------*/
    /**
    * Convert a decimal character to UTF-8
    */
    function dec_char_ref_to_utf8($int=0)
    {
        $return = '';

        if ( $int < 0 )
        {
            return chr(0);
        }
        else if ( $int <= 0x007f )
        {
            $return .= chr($int);
        }
        else if ( $int <= 0x07ff )
        {
            $return .= chr(0xc0 | ($int >> 6));
            $return .= chr(0x80 | ($int & 0x003f));
        }
        else if ( $int <= 0xffff )
        {
            $return .= chr(0xe0 | ($int  >> 12));
            $return .= chr(0x80 | (($int >> 6) & 0x003f));
            $return .= chr(0x80 | ($int  & 0x003f));
        }
        else if ( $int <= 0x10ffff )
        {
            $return .= chr(0xf0 | ($int  >> 18));
            $return .= chr(0x80 | (($int >> 12) & 0x3f));
            $return .= chr(0x80 | (($int >> 6) & 0x3f));
            $return .= chr(0x80 | ($int  &  0x3f));
        }
        else
        { 
            return chr(0);
        }
        
        return $return;
    }

    /*-------------------------------------------------------------------------*/
    // Helper function
    /*-------------------------------------------------------------------------*/
    
    function dec_char_ref_to_utf8_hexdec( $matches )
    {
        return $this->dec_char_ref_to_utf8( hexdec( $matches[1] ) );
    }
    
    /*-------------------------------------------------------------------------*/
    // Convert Ajax unicode
    /*-------------------------------------------------------------------------*/
    
    function convert_unicode($t)
    {
        if ( strtolower($this->ipsclass->vars['gb_char_set']) == 'utf-8' )
        {
            return preg_replace_callback( '#%u([0-9A-F]{1,4})#i', array( &$this, 'dec_char_ref_to_utf8_hexdec' ), utf8_encode($t) );
        }
        else
        {
            return preg_replace_callback( '#%u([0-9A-F]{1,4})#i', create_function( '$matches', "return '&#' . hexdec(\$matches[1]) . ';';" ), $t );
        }
    }


Автор: smartov 8.11.2007, 12:21
maugli, в php выше версии 5.0.0 можно сделать просто вот так
Код

<?

echo html_entity_decode('&#1101&#1090&#1086', null, 'UTF-8');

?>


p.s. но корректнее конечно ; ставить в конце спец символов. 
К сожалению показать не могу - оно сразу преобразуется в русские символы smile

Но у меня на 5.2.3 работает и без ;

Автор: maugli 8.11.2007, 13:59
Всем спасибо smile буд пробовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)