doufeng1249
2012-01-18 21:18
浏览 243

div中的标题(“Content-Type:audio / mpeg”)

i have a file 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>

Now i want to use jquery to load the result of this mp3 file and output it in a div:

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

When i check the source of the div, it becomes something weird like:

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

I think the header information is lost in speakWord.php when loaded in a div, i think im missing a part..

图片转代码服务由CSDN问答提供 功能建议

我有一个文件speakWord.php:

 &lt;  ?php 
header(“Content-Type:audio / mpeg”); 
 $ voice = file_get_contents('http://translate.google.com/translate_tts?tl='.wlenlencode($ _ POST ['language'])  。'&amp; q ='。urlencode($ _ POST ['word'])。''); 
?&gt; 
 
&lt; audio controls =“controls”autoplay&gt; 
&lt; source src =“&lt;  ;?php echo $ voice;?&gt;“  /&gt; 
&lt; / audio&gt; 
   
 
 

现在我想用jquery加载这个mp3文件的结果并将其输出到div中:

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

当我检查div的来源时,它会变成奇怪的东西:

 &lt; source src  =“��@��#a�F(��y2i���Ǵ1�LA�@���'!D����΂��8”�=“”&gt; 
   
 
 

我认为在装入div时,speakWord.php中的标题信息会丢失,我想我错过了一个部分..

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongpiao0731 2012-01-18 21:28
    已采纳

    If you really have to proxy it over your script (if there was any Google API auth token), then package up the binary data into a base64 data: URL for the src= attribute.

    <?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>
    

    However that's a larger transfer.

    The actual answer, as already given, is that you should separate content types. Your script should only return the audio data, not mixed html and binary content. In essence it should just be:

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

    So instead you had to construct the <audio> tag via jQuery (insted of ajax loading it):

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

    So this src= attribute retrieves the output from your speakWord script, which in turn pulls it over from the translate service.

    已采纳该答案
    打赏 评论
  • douduanque5850 2012-01-18 21:21

    src= is meant to point to a URL, not be filled with binary data.

    You have to either

    • send binary data, with an appropriate header
    • OR send a HTML fragment, referencing (but not containing) the binary data.

    Not both at the same time.

    打赏 评论

相关推荐 更多相似问题