Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Google translate - где же баг ? |

17.04.2009, 13:39
|
|
Познающий
Регистрация: 10.04.2005
Сообщений: 49
Провел на форуме: 108176
Репутация:
12
|
|
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"])."&";
$google_translator_data .= "text=".urlencode($this->opts["text"]);
$gphtml = $this->postPage(
array(
"url" => $google_translator_url,
"data" => $google_translator_data
)
);
$out = substr($gphtml, strpos($gphtml, "<div id=result_box dir=\"ltr\">"));
$out = substr($out, 29);
$out = substr($out, 0, strpos($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($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_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 чтобы не мучиться с кодировкой.
|
|
|

17.04.2009, 15:56
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Для перевода с англ на русс достаточно вставить в самый верх исполняемого скрипта:
<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..
|
|
|

17.04.2009, 17:11
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Забавно конечно, но если добавить
PHP код:
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8');
То все будет работать. Мистика, конечно, но гуглу видимо наплевать на заголовки Accept-Charset и посылает в кодировке указанной в юзерагенте.
|
|
|

17.04.2009, 18:27
|
|
Познающий
Регистрация: 10.04.2005
Сообщений: 49
Провел на форуме: 108176
Репутация:
12
|
|
ХМ, гугл какой то странный 
Спасибо за совет попробую данный код, хотя и сам думал отправить ему хидеры, только вот про юзер агента как то даже не подумал.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|