2015-09-16 51 views
1

我一直在寻找和尝试几个小时,似乎无法找到任何能够真正解决我的问题的东西。 我打电话给一个PHP函数,它使用Google翻译API抓取内容,并传递一个要翻译的字符串。 有很多情况下,编码受到影响,但我已经完成了这一点,它仍然工作得很好,据我记忆。PHP的编码问题

下面是调用该函数的代码:

$name = utf8_encode(mt($name)); 

而这里的实际功能:

function mt($text) { 

    $apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 
    $url = 'https://www.googleapis.com/language/translate/v2?key=' . $apiKey . '&q=' . rawurlencode($text) . '&source=en&target=es'; 
    $handle = curl_init($url); 
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); 
    $response = curl_exec($handle); 
    echo curl_error($handle); 
    $responseDecoded = json_decode($response, true); 
    $responseCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);  //Fetch the HTTP response code 
    curl_close($handle); 

    if($responseCode != 200) { 
     $resultxt = 'failed!'; 
     return $resultxt; 
    } 
    else { 
     $resultxt = $responseDecoded['data']['translations'][0]['translatedText']; 
     return utf8_decode($resultxt); //return($resultxt) won't work either 
    } 
} 

我到底是什么了越来越为任何加重字符乱码字符,如顾Ã ­ del desarrollador de XML 我试过编码/解码的所有组合我只是无法得到它的工作...

+0

你在哪里看到乱码?在一个HTML文件中? – Phil

+0

我正在用从该函数返回的字符串记录一个XML文件。我多次调用该函数,用于我需要翻译的XML文件的每个元素。我正在使用SimpleXML - '$ xml-> asXML($ xmlFile)' –

+0

我想出了(部分)。我正在处理上述的XML文件,它需要@gonzalon建议的编码声明,并且必须使用以下代码才能使其正确显示: '$ resultxt = $ responseDecoded ['data'] ['translations' ] [0] [ 'translatedText']; $ str = html_entity_decode($ resultxt); $ utf8 = utf8_decode($ str); return $ utf8;' –

回答

1

我有这样的问题之前,我可以告诉你尝试是:

  1. <head>标签尝试添加:

<meta http-equiv=”Content-type” content=”text/html; charset=utf-8″ />

  • 尝试添加它在PHP头:
  • header(“Content-Type: text/html;charset=utf-8”);

  • 检查文件的编码,例如在Notepad ++
  • 编码>UTF-8 without BOM

  • 设置字符集中的.htaccess
  • AddDefaultCharset utf-8

  • 正如你说你是从用户读取文件,您可以使用此功能:mb-convert-encoding检查的编码,如果它不同于UTF-8转换。尝试this

    $content = mb_convert_encoding($content, 'UTF-8'); if (mb_check_encoding($content, 'UTF-8')) { // log('Converted to UTF-8'); } else { // log('Could not converted to UTF-8'); } } return $content; } >
  • +0

    谢谢。我试过了。问题是我不能控制加载哪个XML文件,它们是用户生成的文件,可能不包含标题。我试图在PHP头中添加'charset = utf-8',它也不能正常工作... –

    +0

    @PauloHgo可能会使用'.htaccess'更新吗? – gonzalon

    +0

    我需要做更多的研究,但是我只用那一行创建了一个.htaccess文件(这就是所需的全部内容?),并放在与我正在加载的PHP文件相同的文件夹中,但它不起作用。我从来没有使用.htaccess之前... –