我在Ubuntu上,我有一些包含特殊字符的目录,如'š','č','ü'等。
我正在使用以下代码:
$path = "/var/www/html/folder/$var1";
$io = popen ( '/usr/bin/du -sk ' . escapeshellarg($path), 'r' );
$size = fgets ( $io );
我使用escapeshellarg($path)
,因为我的一些目录包含空格,这个解决方案工作正常,当我的网站上显示$ path时,它显示正确。但是,对于具有特殊字符的目录,$ size不返回任何内容。
我能做些什么才能让它发挥作用?
样本输出:
echo 'Directory: ' . $path . ' => Size: ' . $size . '<br>';
Directory: /var/www/html/folder/y/x => Size: 3464
Directory: /var/www/html/folder/ü/x => Size:
Directory: /var/www/html/folder/š/x => Size:
正如我们在评论中发现的那样,您可以这样做:
setlocale(LC_CTYPE, "en_US.UTF-8");
我从escapeshellarg
的PHP文档页面的评论中获得了灵感
http://php.net/manual/en/function.escapeshellarg.php#99213
当escapeshellarg()从UTF-8字符串中剥离我的非ASCII字符时,添加以下内容解决了问题:
setlocale(LC_CTYPE, "en_US.UTF-8");
我注意到在你的调试输出中你只是回应$path
,当我们真正想要看到的是escapeshellarg
的结果,这是传递给命令行的结果,而不是它的输入。检查后问题变得更清楚了。
此外,当我在沙盒中测试它时,它似乎没有删除那些,所以我不确定它会工作。但是我知道在网上查看东西时很大程度上取决于服务器设置,内容类型等。在这两种情况下我都无法真正知道,因为我不知道服务器(你的或沙箱)是怎样的建立。
所以我觉得值得一提。
沙箱代码:
echo escapeshellarg("fooščü");
产量
'fooščü' //looks like it didnt remove them
我把上面的评论放在后面。
就个人而言,我从未遇到过这个问题,所以我很高兴我们能够解决这个问题。
干杯!