包含由curl错误解释的中文字符的查询字符串

时间:2014-07-01 01:36:11

标签: php curl file-get-contents google-translate url-encoding

固定。感谢Jack提供了出色的解决方案。请查看前端www.papertiger.net.nz/flashcard /

该代码旨在从translate.google.com获取单个中文字符的mp3。我正在使用该脚本来解决谷歌跨域政策。我已经尝试过urlencode,rawurlencode,utf8_encode,utf8_encode和urlencode以及curl_escape的组合,它看起来不像我服务器上安装的php。

以下是代码:

 <?php
$q=$_GET['url'];
 header('Content-Type: audio/mp3');
 $curl=curl_init();
 $q= utf8_encode($q);$filename=utf8_encode("http://translate.google.com/translate_tts?tl=zh_CN&q=");
 $filename=$filename.urlencode($q);
 curl_setopt($curl, CURLOPT_URL, $filename);
 $voice = curl_exec($curl);
 curl_close($curl);
 echo $voice;
?>

您可以收听结果here。它应该听起来更接近“太阳”。正如你可以看到here,如果我有php echo $ filestring而不是$ voice,链接格式正确并且工作正常。简单的重定向也会产生相同的结果,但不适用于我的目的。

1 个答案:

答案 0 :(得分:0)

我不确定原因,但显然Google会检查用户代理;以下在我的机器上工作正常:

$url = 'http://translate.google.com/translate_tts?' . http_build_query(array(
    'tl' => 'zh_CN',
    'q' => $_GET['url'],
));

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
));

header('Content-Type: audio/mp3');
curl_exec($ch);

由此产生的音频会产生&#34; san1&#34;对于你给出的例子。