如何在PHP中执行的Shell命令中处理Unicode字符(utf8)

立方的

我有dir函数,用于查找所有可执行文件和目录,其代码如下:

    $EXEC = 'X';
    $DIR = 'D';
    $FILE = 'F';
    // depend on GNU version of find (not tested on different versions)
    $cmd = "find . -mindepth 1 -maxdepth 1 \\( -type f -executable -printf ".
           "'$EXEC%p\\0' \\)  -o -type d -printf '$DIR%p\\0' -o \\( -type l -x".
           "type d -printf '$DIR%p\\0' \\) -o -not -type d -printf '$FILE%p\\0'";
    $result = $this->command($token, $cmd, $path);

我的命令功能具有如下代码:

    $pre .= ";export LC_ALL=en_US.UTF-8; export HOME='$home';cd '$path'; $aliases\n";
    $post = ";echo -n \"$marker\";pwd";
    $command = escapeshellarg($pre . $command . $post);
    $command = $this->sudo($token, $username, '/bin/bash -c ' . $command . ' 2>&1');
    $command = $this->unbuffer($token, $command);
    $result = $this->$shell_fn($token, $command);

其中$ shell_fn是shell执行函数之一或使用curl进行的perl / python cgi调用。

通过在命令之前添加export LC_ALL = en_US.UTF-8,我已经解决了ls的问题,它现在显示具有诸如RobertGawliński之类的Unicode字符的内容,但是当我这样做echo ą或尝试在目录RobertGawliński上调用dir时,它就会中断。echo ą显示Ä并cd Robert Gawliński显示错误

/bin/bash: line 2: cd: $'Robert GawliÅ\302\204ski/': No such file or directory
立方的

似乎shell命令的输入是由php语言环境处理的,因此:

  1. 处理输出,您需要在exec中导出LC_ALL
  2. 但需要输入,请致电:
$locale = 'en_US.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Windows上的Go(golang)中打印UTF-8(或unicode)字符

如何在Java中为UTF8字符串做子字符串?

如何在PHP中解析charset utf8?

字符不在曲目UTF8中

如何在Postgres UTF8客户端编码中获取“€”(u + 20AC)字符?

如何在utf8中解码_entities

如何在erlang中连接两个utf8字符串?

如何从PHP中的UTF8字符“删除变音符号”?

如何在用UTF8编码的C中打印unicode字符?

在Haskell中,如何获取UTF8字符串中的字节数?

如何在R中处理utf-8字符

如何使用中文Unicode UTF8字符运行neo4j shell?

如何在Snowflake中查找非utf8字符的行?

如何在R脚本中处理Unicode字符“✧”(U + 2727)

utf8中的php字符比较

如何在Powershell中显示utf8?

如何在带有查询的PHP mysql中设置字符集utf8和表行排序规则

utf8不转换PHP中的字符串

如何在自己的Shell中执行来自Ruby的Shell命令?

如何在PHP中执行Shell脚本

在chroot的env中,ls命令显示“?” 而不是UTF8字符

如何在VIM中查看UTF-8 Unicode字符

如何在OS X终端中显示UTF8字符串

如何处理FileInput中无效的utf8?

如何在Scandir php的路径地址中使用UTF8字符

如何在 PHP 中突出显示 utf8 文本中的非 utf8 字符串?

如何在delphi10中将字符串正确编码为UTF8?

如何将原始utf8mb4_unicode_ci(如X'313735313136')转换为php中的常规字符串(utf8)

如何在R中对文本字符串(utf8)进行多序列对齐