php: file_get_contents kodlama sorunu

3 Cevap php

My task is simple: make a post request to translate.google.com and get the translation. In the following example I'm using the word "hello" to translate into russian.

header('Content-Type: text/plain; charset=utf-8');  // optional
error_reporting(E_ALL | E_STRICT);

$context = stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => implode("\r\n", array(
            'Content-type: application/x-www-form-urlencoded',
            'Accept-Language: en-us,en;q=0.5', // optional
            'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' // optional
        )),
        'content' => http_build_query(array(
            'prev'  =>  '_t',
            'hl'    =>  'en',
            'ie'    =>  'UTF-8',
            'text'  =>  'hello',
            'sl'    =>  'en',
            'tl'    =>  'ru'
        ))
    )
));

$page = file_get_contents('http://translate.google.com/translate_t', false, $context);

require '../simplehtmldom/simple_html_dom.php';
$dom = str_get_html($page);
$translation = $dom->find('#result_box', 0)->plaintext;
echo $translation;

Isteğe bağlı olarak işaretlenmiş çizgiler çıkış aynı olan olmayan bileşiklerdir. Ama garip karakterler alıyorum ...

������

Denedim

echo mb_convert_encoding($translation, 'UTF-8');

Ama olsun

ÐÒÉ×ÅÔ

Herkes bu sorunu çözmek için nasıl biliyor mu?

GÜNCELLEME:

  1. Forgot to mention that all my php files are encoded in UTF-8 without BOM
  2. When i change the "to" language to "en", that is translate from english to english, it works ok.
  3. I do not think the library I'm using is messing it up, because Denedim to output the whole $page without passing it to the library functions.
  4. PHP 5 kullanıyorum

3 Cevap

Öncelikle, tarayıcı UTF-8 ayarlanır? Firefox sizi View-> Karakter Kodlama metin kodlama ayarlayabilirsiniz. Eğer "Unicode (UTF-8)" seçili olduğundan emin olun. Ben de View-> Karakter Kodlama-> Auto-Detect açardı "Evrensel".

İkincisi, bu nedenle gibi, FILE_TEXT bayrak geçme deneyebilirsiniz:

$page = file_get_contents('http://translate.google.com/translate_t', FILE_TEXT, $context);

Bu yardım eğer bu yazıyı görmek için deneyin http://stackoverflow.com/questions/649480/curl-import-character-encoding-problem/649856#649856

Ayrıca bu pasajı deneyebilirsiniz (php.net alınan)

<?php
function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}
?>

Accept-Charset gerçekten isteğe bağlı değildir. Orada UTF8'i belirtmelidir. Rus karakterler iso_8859-1 geçerli değildir