将带有空格的PHP变量传递给bash

时间:2016-02-21 03:20:32

标签: php bash

我知道之前已经回答过,但是代码中存在一个奇怪的错误。

以下是从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变量时,它没有正确工作,我不知道为什么这样做正在发生。

1 个答案:

答案 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()