2014-07-01 19 views
0

固定。感謝傑克提供了非常棒的解決方案。請查看前端www.papertiger.net.nz/flashcard/包含中文字符的查詢字符串由curl錯誤地解釋

該代碼旨在從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,則鏈接格式正確,並且工作正常。簡單的重定向也會給出相同的結果,但不適合我的目的。

回答

0

我不知道爲什麼,但顯然谷歌檢查用戶代理;以下在我的機器上正常工作:

$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); 

由此產生的音頻會爲您給出的示例生成「san1」。

+0

用您建議的代碼替換我的代碼。它仍然在說「A」,如http://www.papertiger.net.nz/flashcard/gLoad.php?url=%E4%B8%89。我有一種感覺,它與我的網絡主機有關,但我不知道該怎麼問他們去尋找/修復 – urbanvintner

+0

@urbanvintner不用擔心,加油!:) –