我知道之前已经回答过,但是代码中存在一个奇怪的错误。
以下是从PHP脚本获取$ title变量的bash代码:
#!/bin/bash
url=$1
type=$2
bitrate=$3
vidid=$4
title=$TITLE
TMP_FILE="youtube-mp3-$RANDOM.tmp"
youtube-dl --get-title --get-url --get-filename "$url" > $TMP_FILE 2> "/tmp/$TMP_FILE.err"
exec 42< $TMP_FILE
while read video_title <&42 ; do
read video_url <&42
read video_filename <&42
if [ "$type" = "vorbis" ]; then
#youtube-dl -x --prefer-ffmpeg --audio-format vorbis --audio-quality "$bitrate" "$url"
echo "$title" > title-test
else
#youtube-dl -x --prefer-ffmpeg --audio-format "$type" --audio-quality "$bitrate" "$url"
echo "$title" > title-test
fi
done
exec 42<&-
rm -f $TMP_FILE
这是将变量发送到bash的PHP代码:
$link = $cmd;
$video_id = explode("?v=", $link);
$video_id = $video_id[1];
$yturl = "http://www.youtube.com/watch?v=".$video_id;
$page = file_get_contents($yturl);
$doc = new DOMDocument();
$doc->loadHTML($page);
$title_div = $doc->getElementById('eow-title');
$title = $title_div->nodeValue;
putenv("TITLE=$title");
它确实正确地将YouTube视频标题回显到&#34; title-test&#34;但是当它发送时它会发送它: {输入} {空间} {空间} {空间} {空间} $标题
所以在视频标题之前有空格,当我尝试在bash中使用mv,rm或cp $ title变量时,它没有正确工作,我不知道为什么这样做正在发生。
答案 0 :(得分:2)
让我们看一个例子:https://www.youtube.com/watch?v=FTXN5nOstRs文档中id =“eow-title”的元素如下所示:
<span id="eow-title" class="watch-title " dir="ltr" title="Richard Dawkins exploding at bullshit in the Bible">
Richard Dawkins exploding at bullshit in the Bible
</span>
由于libxml没有告诉前导/尾随空格无关紧要,因此该元素的节点值为“{enter} {space} {space} {space} {space} Richard Dawkins ......”。
你可能会摆脱空白,例如通过trim()。