PHP将带有撇号的字符串传递给shell_exec

时间:2015-01-31 01:40:39

标签: php mysql macos pdo shell-exec

我正在尝试通过PHP shell_exec将字符串(从PDO查询中提取到MYSQL数据库)传递给* nix程序,在本例中为xtide

一切正常,直到我传递一个包含撇号的字符串。

这适用于OSX上的终端:

house@New-MacBook-Pro:~$ tide -l "Nomans Land, Martha's Vineyard, Massachusetts"

但完全相同的字符串,从PDO查询到MYSQL DB,并作为变量传递给shell_exec,总是失败。我如何安排单/双引号似乎并不重要。

运行此命令会添加反斜杠,但仍然会失败:

$tideLocation = mysql_real_escape_string($tideLocation);

输出:

Nomans Land, Martha\’s Vineyard, Massachusetts

故障:

$output1 = shell_exec("/opt/local/bin/tide -l 'Nomans Land, Martha's Vineyard, Massachusetts'");

$output1 = shell_exec("/opt/local/bin/tide -l '$tideLocation'");

这在shell_exec

中手动设置时有效
$output1 = shell_exec("/opt/local/bin/tide -l 'Nomans Land, Martha\'s Vineyard, Massachusetts'");

建议最受欢迎。

1 个答案:

答案 0 :(得分:3)

使用escapeshellarg正确转义命令行参数的单引号中的字符串。

实施例

shell_exec('/opt/local/bin/tide -l ' . escapeshellarg($tideLocation));