перекодировать строку

sunyang

Мастер
Регистрация
25 Апр 2009
Сообщения
440
Реакции
30
как строку, записанную так:
Размер продукта: размер
Бюст :80-90CM Длина: 80 см
Материал: Хлопок
Подкладка: Нет
Гибкость: Да
Другие аксессуары: Нет
Происхождение: Китай

перекодировать в нормальный вид?
 
Давай начнем с того откуда ты ее берешь?
 
вот от сюда:

PHP:
$opisanie = "<br/>
 Product Size: Size
<br/>
 Bust :80-90CM Length: 80CM
<br/>
 Material: Cotton
<br/>
 Lining: None
<br/>
 Flexible: Yes
<br/>
 Other accessories: None
<br/>
 Origin: China"


class Google_Translate_API {

        /**
         * Translate a piece of text with the Google Translate API
         * @return String
         * @param $text String
         * @param $from String[optional] Original language of $text. An empty String will let google decide the language of origin
         * @param $to String[optional] Language to translate $text to
         */
        function translate($text, $from = '', $to = 'en') {
                $url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='.rawurlencode($text).'&langpair='.rawurlencode($from.'|'.$to);
                $response = file_get_contents(
                        $url,
                        null,
                        stream_context_create(
                                array(
                                        'http'=>array(
                                                'method'=>"GET",
                                                'header'=>"Referer: http://".$_SERVER['HTTP_HOST']."/\r\n"
                                        )
                                )
                        )
                );
                if (preg_match("/{\"translatedText\":\"([^\"]+)\"/i", $response, $matches)) {
                        return self::_unescapeUTF8EscapeSeq($matches[1]);
                }
                return false;
        }
        
        /**
         * Convert UTF-8 Escape sequences in a string to UTF-8 Bytes. Old version.
         * @return UTF-8 String
         * @param $str String
         */
        function __unescapeUTF8EscapeSeq($str) {
                return preg_replace_callback("/\\\u([0-9a-f]{4})/i", create_function('$matches', 'return html_entity_decode(\'&#x\'.$matches[1].\';\', ENT_NOQUOTES, \'UTF-8\');'), $str);
        }
        
        /**
         * Convert UTF-8 Escape sequences in a string to UTF-8 Bytes
         * @return UTF-8 String
         * @param $str String
         */
        function _unescapeUTF8EscapeSeq($str) {
                return preg_replace_callback("/\\\u([0-9a-f]{4})/i", create_function('$matches', 'return Google_Translate_API::_bin2utf8(hexdec($matches[1]));'), $str);
        }
        
        /**
         * Convert binary character code to UTF-8 byte sequence
         * @return String
         * @param $bin Mixed Interger or Hex code of character
         */
        function _bin2utf8($bin) {
                if ($bin <= 0x7F) {
                        return chr($bin);
                } else if ($bin >= 0x80 && $bin <= 0x7FF) {
                        return pack("C*", 0xC0 | $bin >> 6, 0x80 | $bin & 0x3F);
                } else if ($bin >= 0x800 && $bin <= 0xFFF) {
                        return pack("C*", 0xE0 | $bin >> 11, 0x80 | $bin >> 6 & 0x3F, 0x80 | $bin & 0x3F);
                } else if ($bin >= 0x10000 && $bin <= 0x10FFFF) {
                        return pack("C*", 0xE0 | $bin >> 17, 0x80 | $bin >> 12 & 0x3F, 0x80 | $bin >> 6& 0x3F, 0x80 | $bin & 0x3F);
                }
        }
        
}



$text = "$opisanie";
$trans_text = Google_Translate_API::translate($text, 'en', 'ru');
if ($trans_text !== false) {
echo $trans_text;
}

а вот в $trans_text уже в cp1251 переведенная стройка.

Поэтому в базу $trans_text записывается кракозяблами.

Как после перевода, преобразовать стору в utf8 ?
 
Ну у меня вот такая старенькая функция до сих пор используется.
PHP:
    function to_utf($arr)
    {
        if (is_array($arr)) {
            foreach ($arr as $k => $v) {
                $arr[$k] = $this->to_utf($v);
            }
        } else {
            $arr = iconv('cp1251', 'utf-8', $arr);
        }
        return $arr;
    }
 
А причем здесь проверка на массив?

iconv('cp1251', 'utf-8', $arr); не хочет эту строку переводить.
 
Я привел функцию, которой пофиг что ей скармливаешь массив или нет. Случаи разные бывают. Мне нужно было для работы с json, когда сайт еще в cp1251 был...
 
а с чего ты вообще решил что тебе ее куда-то надо переводить строка то у тебя как-раз в утф из Гоши выходит просто делать это все надо в файле с кодировкой utf-8 и после подключения к базе прописать
PHP:
mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
mysql_query("SET NAMES utf8");
как тебе уже и советовали только в другой теме
 
Стоп, а дебажить вообще пробовал? Вывод строки до записи в базу? Кодировка базы какая?
zzallexx, практически всегда достаточно только set names.
 
Стоп, а дебажить вообще пробовал? Вывод строки до записи в базу? Кодировка базы какая?
zzallexx, практически всегда достаточно только set names.

да, проблема была с базой.

помогло вот это:

PHP:
mysql_query ("set character_set_client='utf8'");  
mysql_query ("set character_set_results='utf8'"); 
mysql_query ("set collation_connection='utf8_general_ci'"); 
mysql_query("SET NAMES utf8");
 
Назад
Сверху