ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Google translate - где же баг ?
  #1  
Старый 17.04.2009, 13:39
Аватар для Mirovan
Mirovan
Познающий
Регистрация: 10.04.2005
Сообщений: 49
Провел на форуме:
108176

Репутация: 12
Отправить сообщение для Mirovan с помощью ICQ
По умолчанию Google translate - где же баг ?

Есть класс и вызов его:

PHP код:
<?php

class Google_API_translator {
    public 
$opts = array("text" => """language_pair" => "en|it");
    public 
$out "";

    function 
__construct() {
    }

    function 
setOpts($opts) {
        if(
$opts["text"] != ""$this->opts["text"] = $opts["text"];
        if(
$opts["language_pair"] != ""$this->opts["language_pair"] = $opts["language_pair"];
    }

    function 
translate() {
        
$this->out "";
        
$google_translator_url "http://translate.google.com/translate_t?langpair=".urlencode($this->opts["language_pair"])."&amp;";
        
$google_translator_data .= "text=".urlencode($this->opts["text"]);

        
$gphtml $this->postPage(
            array(
                
"url" => $google_translator_url,
                
"data" => $google_translator_data
            
)
        );

        
$out substr($gphtmlstrpos($gphtml"<div id=result_box dir=\"ltr\">"));
        
$out substr($out29);
        
$out substr($out0strpos($out"</div>"));
//        $this->out = iconv('KOI8-R', 'UTF-8//IGNORE', $out);    // en|ru
        
$this->out $out;
        return 
$this->out;
    }

    
// post form data to a given url using curl libs
    
function postPage($opts) {
        
$html "";
        if(
$opts["url"] != "" && $opts["data"] != "") {
            
$ch curl_init($opts["url"]);
            
curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
curl_setopt($chCURLOPT_HEADER1);
            
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
            
curl_setopt($chCURLOPT_TIMEOUT15);
            
curl_setopt($chCURLOPT_POST1);
            
curl_setopt($chCURLOPT_POSTFIELDS$opts["data"]);
            
$html curl_exec($ch);
            if(
curl_errno($ch)) $html "";
            
curl_close ($ch);
        }
        return 
$html;
    }
}
?>

<?php
$g 
= new Google_API_translator();
$g->setOpts(
    array(
        
"text" => "привет",
        
"language_pair" => "ru|en"
    
)
);
$g->translate();
echo 
$g->out;
?>

Че то старнное твориться с кодировкой - не могу перевести из RU в EN, кодировка чето гонит.

mb_detect_encoding говорит что данные в UTF-8, однако возвращаются крокозябры. Между не киррил. языками эзал utf8_encode - было все ок.

Тут же проблема

Как сделать передачу данных и получение в UTF-8 чтобы не мучиться с кодировкой.
 
Ответить с цитированием

  #2  
Старый 17.04.2009, 15:56
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Для перевода с англ на русс достаточно вставить в самый верх исполняемого скрипта:

<meta http-equiv="Content-Type" content="text/html; charset=KOI8-R">';

а с русского на англ бред какой-то, прилетает в ASCii, в общем пока подумаю

А русский оно посылает вообще хитро, вот такой строкой (слово "привет", например):

%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82

что в переводе означает:

привет

что в переводе означает:

"привет" ( CP1251 → UTF-8 )

так что вот этого и надо прыгать Хотя непонятно вообще, почему ответ в ASCii прилетает, если перевод с русского на англ

Последний раз редактировалось Pashkela; 17.04.2009 в 16:54..
 
Ответить с цитированием

  #3  
Старый 17.04.2009, 17:11
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

Забавно конечно, но если добавить
PHP код:
            curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8'); 
То все будет работать. Мистика, конечно, но гуглу видимо наплевать на заголовки Accept-Charset и посылает в кодировке указанной в юзерагенте.
 
Ответить с цитированием

  #4  
Старый 17.04.2009, 18:27
Аватар для Mirovan
Mirovan
Познающий
Регистрация: 10.04.2005
Сообщений: 49
Провел на форуме:
108176

Репутация: 12
Отправить сообщение для Mirovan с помощью ICQ
По умолчанию

ХМ, гугл какой то странный
Спасибо за совет попробую данный код, хотя и сам думал отправить ему хидеры, только вот про юзер агента как то даже не подумал.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
акк нуллед - открыть ссылку нужно DVD_RW Болталка 6 23.04.2009 10:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ