заголовок ("Content-Type: audio / mpeg") в div - PullRequest
0 голосов
/ 19 января 2012

у меня есть файл speakWord.php:

<?php
header("Content-Type: audio/mpeg");
$voice = file_get_contents('http://translate.google.com/translate_tts?tl=' . urlencode($_POST['language']) . '&q=' . urlencode($_POST['word']) . '');
?>

<audio controls="controls" autoplay>
    <source src="<?php echo $voice; ?>"  />
</audio>

Теперь я хочу использовать jquery для загрузки результата этого mp3-файла и вывода его в div:

$("#speakWord")
.load("speakWord.php", {
    language: "nl",
    word: "test"
});

Когда я проверяю источник div, он становится чем-то странным, вроде:

<source src="��@��#a�F(��y2i���Ǵ1�L A�@���'!D����΂��8" �="">

Я думаю, что информация заголовка теряется в speakWord.php при загрузке в div, я думаю, что мне не хватает части ...1010 *

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Если вам действительно нужно прокси-сервер над своим сценарием (если был какой-либо токен аутентификации API Google), то упакуйте двоичные данные в URL-адрес base64 data: для атрибута src=.

<?php
   // Content-Type for whole PHP output remains text/html 
   $voice = file_get_contents('http://translate.google.com/translate_tts?tl=' . urlencode($_POST['language']) . '&q=' . urlencode($_POST['word']) . '');
?>
<audio controls="controls" autoplay>
    <source src="data:audio/mpeg;base64,<?php echo base64_encode($voice); ?>"  />
</audio>

Однако это более крупный перевод.

Фактический ответ, как уже дано, заключается в том, что вы должны разделять типы контента. Ваш скрипт должен возвращать только аудиоданные, а не смешанный HTML и двоичный контент. По сути это должно быть просто:

<?php
  header("Content-Type: audio/mpeg");
  readfile('http://translate.google.com/translate_tts?tl=' . urlencode($_POST['language']) . '&q=' . urlencode($_POST['word']) . '');
?>

Таким образом, вместо этого вы должны были создать тег <audio> через jQuery (вместо ajax-загрузки):

$("#speakWord")
.html("<audio... src='speakWord.php?language=nl&word=test'></audio>");

Таким образом, этот атрибут src= извлекает выходные данные из вашего скрипта speakWord, который, в свою очередь, извлекает его из службы перевода.

0 голосов
/ 19 января 2012

src= предназначен для указания URL-адреса, а не для заполнения двоичными данными.

Вы должны либо

  • отправка двоичных данных с соответствующим заголовком
  • ИЛИ отправьте фрагмент HTML, ссылающийся (но не содержащий ) на двоичные данные.

Не оба одновременно.

...