2011-01-29 19 views
1

既存のスレッドを検索しましたが、解決策が見つかりませんでした..ここに私の質問があります。file_get_contents()Googleテキスト/スピーチ音声ファイル非英語/ラテン文字

私はmp3ファイルをダウンロードするためにGoogleのテキストを音声で使用しています。この機能は、英語の文字を使用する言語および言語に最適です。残念ながら、ロシア語(または任意の非ラテン文字)のために私のスクリプトは、正しいURLを生成しますが、任意のコンテンツをダウンロードdoes notの(それが空0キロバイトのファイルを...ダウンロードしない)

file_put_contents($filepath,file_get_contents("http://translate.google.com/translate_tts?tl=".$lang."&q=".rawurlencode($transtext)."")); 

だから、サンプルフランス語の単語(電話)http://translate.google.com/translate_tts?tl=fr&q=t%C3%A9l%C3%A9phone

手動でページに移動してファイルをダウンロードすると、すべてが機能しますが、file_get_contentsでは機能しません。

答えて

2

入力エンコードパラメータ(ie=UTF-8)を追加し、それに応じて変換テキストをエンコードする必要があります。

たとえば、次のPHPスニペットを使用して、「Téléphone」の音声ファイル(フランス語)をGoogle TTSサービスからダウンロードできます。入力エンコーディングパラメータなしでは正しく動作しないことに注意してください。

$transtext = "t\xe9l\xe9phone"; // ISO-8859-1 string to be encoded in UTF-8 
$base_url = 'http://translate.google.com/translate_tts?'; 
$qs = http_build_query(array(
    'tl' => 'fr', 
    'ie' => 'UTF-8', 
    'q' => utf8_encode($transtext) 
)); 
$contents = file_get_contents($base_url . $qs); 
+0

こんにちは、私は "ie = UT8"をGoogle翻訳のURLに入れても問題ありません。ありがとうございました。 – Kerberos

+0

これは、クエリ文字列$ qsが最後の行の$ base_urlに追加される理由です。 $ qsは 'tl = fr&ie = UTF-8&q =' ...(とコード化された$ transtext) – scoffey

+0

と同じです。 – Mike

0

これは、ファイル全体をメモリに保存する必要があるため、HTTP経由でファイルをダウンロードすることは非常に難しい方法です。 cURLまたはfopenを使用するか、どちらもシンプルです。どちらかについてさらに助けが必要かどうか質問してください。

+0

返信いただきありがとうございます。fopen does not work(英語は正常に動作します)。それはURL /文字と関係がある..おそらくgoogleが実際の文字にリダイレクトする。もしあなたが私がintに与えたサンプルリンクを入力すれば、それはte'le'phone(実際のURLとして実際に働く。 。右?) – Mike

+0

私はそれがURLを解読するものかどうか疑問に思います。デコードされたバージョンを試すと、おそらくストリームラッパーのURLがエンコードされますか? – chx

+0

おそらくこれは問題です:http://www.ibm.com/developerworks/library/os-php-unicode/index.html – Mike

関連する問題