Как изменить язык

Тема в разделе "PHP", создана пользователем anthrax, 2 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. anthrax

    anthrax Писатель

    Заблокирован
    Регистр.:
    30 окт 2006
    Сообщения:
    382
    Симпатии:
    198
    Есть такая вот функция:



    utf8_encode(word_filter(bbcode(nl2br(nohtml($comments_row['comment']))))),

    Как заставить работать это все на windows-1251 ???
     
  2. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Вот это да.. )

    Убери utf8_encode, она переделывает в юникод..
    А если входная кодировка не вин1251, то юзай iconv.


    пс. вместо какой-то левой nohtml в пхп есть функция strip_tags().. Уверен, делает она то же самое )
     
    anthrax нравится это.
  3. anthrax

    anthrax Писатель

    Заблокирован
    Регистр.:
    30 окт 2006
    Сообщения:
    382
    Симпатии:
    198
    Но факт в том что подключается ajax.js


    function submit_comment(file_id) {
    if (xmlHttp == null) {
    return;
    }
    xmlHttp.open('POST', siteurl + '/file.php?a=submit_comment&f=' + file_id, true);
    xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
    document.getElementById("comment_error").innerHTML = xmlHttp.responseText;
    display_comments(file_id, 1);
    document.getElementById("comment_message").value = '';
    }
    }
    xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttp.send('message=' + escape(document.getElementById("comment_message").value));
    }


    И один фиг не идет..
     
  4. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    А что конкретно не идет? Может текст в урл кодировке приходит и это не нравится? Тогда поможет функция urldecode. Пример можно того, что приходит?
     
  5. anthrax

    anthrax Писатель

    Заблокирован
    Регистр.:
    30 окт 2006
    Сообщения:
    382
    Симпатии:
    198
    Вот например пишу коммент :

    Привет:

    в базу забивает: %u041F%u0440%u0438%u0432%u0435%u0442

    И соответственно выводит эту же абракадабру
     
  6. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    У тебя через аякс отправляется яваскриптовский юникод, то есть тебе его надо преобразовывать..

    Если не ошибаюсь, в библиотеке аякса Д. Котерова есть функция для переделывания js utf8 -> php utf8...
     
  7. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Вот часть кода класса, которая отвечает за перевод..
    пс. Именно КЛАССА, как процедура работать не будет (нужно внести изменения, думаю справишься...)

    PHP:
    /**
         * Decode all %uXXXX entities in string or array (recurrent).
         * String must not contain %XX entities - they are ignored!
         */
        
    function _ucs2EntitiesDecode($data)
        {
            if (
    is_array($data)) {
                
    $d = array();
                foreach (
    $data as $k=>$v) {
                    
    $d[$this->_ucs2EntitiesDecode($k)] = $this->_ucs2EntitiesDecode($v);
                }
                return 
    $d;
            } else {
                if (
    strpos($data'%u') !== false) { // improve speed
                    
    $data preg_replace_callback('/%u([0-9A-F]{1,4})/si', array(&$this'_ucs2EntitiesDecodeCallback'), $data);
                }
                return 
    $data;
            }
        }


        
    /**
         * Decode one %uXXXX entity (RE callback).
         */
        
    function _ucs2EntitiesDecodeCallback($p)
        {
            
    $hex $p[1];
            
    $dec hexdec($hex);
            if (
    $dec === "38" && $this->SCRIPT_DECODE_MODE == 'entities') {
                
    // Process "&" separately in "entities" decode mode.
                
    $c "&";
            } else {
                if (
    $this->_unicodeConvMethod) {
                    
    $c = @$this->_unicodeConv('UCS-2BE'$this->SCRIPT_ENCODINGpack('n'$dec));
                } else {
                    
    $c $this->_decUcs2Decode($dec$this->SCRIPT_ENCODING);
                }
                if (!
    strlen($c)) {
                    if (
    $this->SCRIPT_DECODE_MODE == 'entities') {
                        
    $c '&#' $dec ';';
                    } else {
                        
    $c '?';
                    }
                }
            }
            return 
    $c;
        }


        
    /**
         * Wrapper for iconv() or mb_convert_encoding() functions.
         * This function will generate fatal error if none of these functons available!
         * 
         * @see iconv()
         */
        
    function _unicodeConv($fromEnc$toEnc$v)
        {
            if (
    $this->_unicodeConvMethod == 'iconv') {
                return 
    iconv($fromEnc$toEnc$v);
            } 
            return 
    mb_convert_encoding($v$toEnc$fromEnc);
        }


        
    /**
         * If there is no ICONV, try to decode 1-byte characters manually
         * (for most popular charsets only).
         */
         
        /**
         * Convert from UCS-2BE decimal to $toEnc.
         */
        
    function _decUcs2Decode($code$toEnc)
        {
            if (
    $code 128) return chr($code);
            if (isset(
    $this->_encTables[$toEnc])) {
                
    // TODO: possible speedup by using array_flip($this->_encTables) and later hash access in the constructor.
                
    $p array_search($code$this->_encTables[$toEnc]);
                if (
    $p !== false) return chr(128 $p);
            }
            return 
    "";
        }
        

        
    /**
         * UCS-2BE -> 1-byte encodings (from #128).
         */
        
    var $_encTables = array(
            
    'windows-1251' => array(
                
    0x04020x04030x201A0x04530x201E0x20260x20200x2021,
                
    0x20AC0x20300x04090x20390x040A0x040C0x040B0x040F,
                
    0x04520x20180x20190x201C0x201D0x20220x20130x2014,
                
    0x00980x21220x04590x203A0x045A0x045C0x045B0x045F,
                
    0x00A00x040E0x045E0x04080x00A40x04900x00A60x00A7,
                
    0x04010x00A90x04040x00AB0x00AC0x00AD0x00AE0x0407,
                
    0x00B00x00B10x04060x04560x04910x00B50x00B60x00B7,
                
    0x04510x21160x04540x00BB0x04580x04050x04550x0457,
                
    0x04100x04110x04120x04130x04140x04150x04160x0417,
                
    0x04180x04190x041A0x041B0x041C0x041D0x041E0x041F,
                
    0x04200x04210x04220x04230x04240x04250x04260x0427,
                
    0x04280x04290x042A0x042B0x042C0x042D0x042E0x042F,
                
    0x04300x04310x04320x04330x04340x04350x04360x0437,
                
    0x04380x04390x043A0x043B0x043C0x043D0x043E0x043F,
                
    0x04400x04410x04420x04430x04440x04450x04460x0447,
                
    0x04480x04490x044A0x044B0x044C0x044D0x044E0x044F,
            ),
            
    'koi8-r' => array(
                
    0x25000x25020x250C0x25100x25140x25180x251C0x2524,
                
    0x252C0x25340x253C0x25800x25840x25880x258C0x2590,
                
    0x25910x25920x25930x23200x25A00x22190x221A0x2248,
                
    0x22640x22650x00A00x23210x00B00x00B20x00B70x00F7,
                
    0x25500x25510x25520x04510x25530x25540x25550x2556,
                
    0x25570x25580x25590x255A0x255B0x255C0x255d0x255E,
                
    0x255F0x25600x25610x04010x25620x25630x25640x2565,
                
    0x25660x25670x25680x25690x256A0x256B0x256C0x00A9,
                
    0x044E0x04300x04310x04460x04340x04350x04440x0433,
                
    0x04450x04380x04390x043A0x043B0x043C0x043d0x043E,
                
    0x043F0x044F0x04400x04410x04420x04430x04360x0432,
                
    0x044C0x044B0x04370x04480x044d0x04490x04470x044A,
                
    0x042E0x04100x04110x04260x04140x04150x04240x0413,
                
    0x04250x04180x04190x041A0x041B0x041C0x041d0x041E,
                
    0x041F0x042F0x04200x04210x04220x04230x04160x0412,
                
    0x042C0x042B0x04170x04280x042d0x04290x04270x042A      
            
    ),
        );
     
Статус темы:
Закрыта.