Запускаем такой скриптик:
<?php
// берём чешское слово 'Koláče' (пироги), подготавливаем к передаче через URL
$text = urlencode('Koláče');
// формируем запрос
$query = "http://translate.google.com/translate_a/t?client=x&text={$text}&sl=cs&tl=en";
// который в итоге выглядит так:
// http://translate.google.com/translate_a/t?client=x&text=Kol%C3%A1%C4%8De&sl=cs&tl=en
// посылаем для перевода
// этот кусок взял отсюда:
//http://stackoverflow.com/questions/542046/php-file-get-contentsloc-fails
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $query);
$response = curl_exec($curl);
curl_close($curl);
// но вместо него можно и проще, результат будет одинаков:
// $response = file_get_contents($query);
echo $response;
?>
в ответ получаем JSON-объект вот с такой фигнёй:
{"sentences":[{
"trans":"Kol\u0102\u0104\u00C4 e",
"orig":"Kol\u0102\u0104\u00C4 e",
"translit":"",
"src_translit":""
}],"src":"cs","server_time":2}
Обратите внимание на поле
orig, каким-то неведомым образом строка 'Kol%C3%A1%C4%8De' трасформировалась в 'Kol\u0102\u0104\u00C4 e'.
А если запрос
translate.google.com/translate_a/t?client=x&text=Kol%C3%A1%C4%8De&sl=cs&tl=en просто вбить в адресную строку браузера, по получим красивый правильный ответ:
{"sentences":[{
"trans":"Pies",
"orig":"Koláče",
"translit":"",
"src_translit":""
}],"src":"cs","server_time":41}
Буду премного благодарен, если кто объяснит, почему так.
Доп. информация: исходная строка в utf-8, да это и не важно, ведь после urlencode получаем только ASCII-символы. С английского переводит нормально, что логично, ведь символы дополнительно не кодируются.
Подозреваю, что браузеры отправляют какие-то «правильные» заголовки, но так ли это, а если так, то как их узнать, а главное, как их отправлять вручную?