php:文件\u获取\u内容编码问题

php:文件\u获取\u内容编码问题,php,encoding,file-get-contents,Php,Encoding,File Get Contents,我的任务很简单:向translate.google.com发出post请求并获得翻译。 在下面的例子中,我使用“hello”这个词来翻译成俄语 header('Content-Type: text/plain; charset=utf-8'); // optional error_reporting(E_ALL | E_STRICT); $context = stream_context_create(array( 'http' => array( 'metho

我的任务很简单:向translate.google.com发出post请求并获得翻译。 在下面的例子中,我使用“hello”这个词来翻译成俄语

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;
标记为可选的行是那些输出相同的行。但我有一些奇怪的角色

������
我试过了

echo mb_convert_encoding($translation, 'UTF-8');
但我明白了

ÐÒÉ×ÅÔ
有人知道如何解决这个问题吗

更新:

  • 忘了提到我所有的php 文件以UTF-8编码,无需 物料清单
  • 当我将“改为”语言时 翻译成“en”,就是从 英语对英语,它工作正常

  • 我不认为我正在使用的库把它搞砸了,因为我试图输出整个$page而不将其传递给库函数
  • 我使用的是PHP5

  • 如果有帮助的话,试着看看这篇文章

    您也可以尝试这个代码段(取自php.net)


    首先,您的浏览器是否设置为UTF-8?在Firefox中,您可以在View->Character encoding中设置文本编码。确保选择了“Unicode(UTF-8)”。我还将“视图->字符编码->自动检测”设置为“通用”

    其次,您可以尝试传递FILE_TEXT标志,如下所示:

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

    Accept字符集实际上并不是那么可选的。您应该在那里指定UTF8。俄语字符在ISO_8859-1中无效

    如果您直接回显$page,字符串是否仍然乱码?不仅翻译是乱码,而且您使用的外部库(simple_html_dom)似乎把它弄乱了。要么写得不好,要么在API的某个地方有这样的选项。您可能想将此信息添加到您的问题中。我不认为我正在使用的库会弄乱它,因为我试图输出整个$page而不将其传递给库函数。是的,我已经尝试过了,它的输出与我问题中的第二个输出相同。这对我来说很有效,谢谢。我知道我的文件在ISO-8859-1中,因为我把文件名放在Chrome中,看了看标题,编码在那里。您还可以在文件获取内容调用之后立即打印
    $http\u response\u header
    来查看编码
    $page = file_get_contents('http://translate.google.com/translate_t', FILE_TEXT, $context);