【问题标题】:file_get_contents() Google Text to Speech audio file non-english/latin charactersfile_get_contents() Google Text to Speech 音频文件非英语/拉丁字符
【发布时间】:2011-01-29 17:10:19
【问题描述】:

我搜索了现有的线程,但找不到任何解决方案。这是我的问题。

我正在使用 google 的文本转语音来下载 mp3 文件。该功能适用​​于英文字符..和使用英文字符的语言。不幸的是,对于俄语(或任何非拉丁字符),我的脚本会生成正确的 url,但不会下载任何内容(但它会下载一个 0kb 的文件.. 为空)

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

【问题讨论】:

    标签: php api text-to-speech file-get-contents


    【解决方案1】:

    您应该添加输入编码参数 (ie=UTF-8) 并对翻译文本进行相应的编码。

    例如,以下 PHP sn-p 可用于从 Google TTS 服务下载“téléphone”(法语)的音频文件。请注意,如果没有输入编码参数,它将无法正常工作。

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

    【讨论】:

    • 您好,当我将“ie=UT8”输入谷歌翻译的网址时,它工作正常,谢谢。
    • 这就是为什么将查询字符串 $qs 附加到最后一行的 $base_url 的原因。 $qs 等于 'tl=fr&ie=UTF-8&q='...(和编码的 $transtext)
    【解决方案2】:

    这是一种通过 HTTP 下载文件的非常糟糕的方式,因为您需要将整个文件保存在内存中。使用 cURL 或 fopen,两者都很简单。询问您是否需要更多帮助。

    【讨论】:

    • 感谢您的快速回复,fopen 也不起作用(对于普通英语,工作正常)。这与 url/字符有关..也许谷歌重定向到实际字符..如果您输入我在他的问题中给出的示例链接,它会拼出 telephone (它实际上并不能作为真正的 url。 . 对吧?)
    • 我想知道它是否与解码 URL 有关。尝试解码版本可能是流包装器 URL 编码?
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多