PHP 将带撇号的字符串传递给 shell_exec
PHP passing string with apostrophe to shell_exec
我正在尝试通过 PHP shell_exec
将字符串(从 PDO 查询提取到 MYSQL 数据库)传递给 *nix 程序,在本例中为 xtide.
在我传递包含撇号的字符串之前一切正常。
这适用于 OSX 的终端:
house@New-MacBook-Pro:~$ tide -l "Nomans Land, Martha's Vineyard, Massachusetts"
但是完全相同的字符串,从 PDO 查询到 MYSQL 数据库,并作为变量传递到 shell_exec,总是失败。我如何排列 single/double 引号似乎并不重要。
运行 这添加了反斜杠,但仍然失败:
$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'");
欢迎多多指教。
使用 escapeshellarg
为命令行参数正确转义单引号中的字符串。
示例:
$command = '/opt/local/bin/tide -l ' . escapeshellarg($tideLocation);
shell_exec($command);
我正在尝试通过 PHP shell_exec
将字符串(从 PDO 查询提取到 MYSQL 数据库)传递给 *nix 程序,在本例中为 xtide.
在我传递包含撇号的字符串之前一切正常。
这适用于 OSX 的终端:
house@New-MacBook-Pro:~$ tide -l "Nomans Land, Martha's Vineyard, Massachusetts"
但是完全相同的字符串,从 PDO 查询到 MYSQL 数据库,并作为变量传递到 shell_exec,总是失败。我如何排列 single/double 引号似乎并不重要。
运行 这添加了反斜杠,但仍然失败:
$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'");
欢迎多多指教。
使用 escapeshellarg
为命令行参数正确转义单引号中的字符串。
示例:
$command = '/opt/local/bin/tide -l ' . escapeshellarg($tideLocation);
shell_exec($command);