php exec的输出因为重音而被截断了

问题描述 投票:0回答:1

我在Linux服务器上建立了一个网站,可以使用mkvmerge命令行提供一些关于mkv文件的信息,但是当我使用mkvmerge命令时,我遇到了一个大问题。$info = shell_exec("mkvmerge -J '".$chemin_fichier."'");当命令行的输出包含重音时,输出被截断。

exptected output :

{
  "container": {
    "properties": {
      "is_providing_timestamps": true,
      "title": "Le Bel Été 2019"
    },
    "type": "Matroska"
  }
}

实际输出。

{
  "container": {
    "properties": {
      "is_providing_timestamps": true,
      "title": "Le Bel

我确实在网上发现我们需要修改环境的语言[使用putenv()和setlocale()],我做了,但它没有工作。但我可以用重音定义一些变量,所以这很奇怪。

总之,当我在我的电脑上用wamp服务器运行同样的文件,或者在我的linux服务器终端运行同样的命令行,我得到了正确的输出,所以我认为问题来自于php(7.3)或apache(2.4)。

你有什么想法吗?欢迎询问其他细节:)

php exec encode diacritics truncated
1个回答
0
投票

好吧,我想明白了!

事实上,语言 "fr_FR.utf8 "不能用于重音和特殊字符,而 "en_US.utf8 "似乎是唯一的解决方案。

我的服务器上的默认语言是POSIX,它也不允许重音。

为了使事情顺利进行,请在您的php脚本中加入以下几行内容

$locale = 'en_US.utf8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
© www.soinside.com 2019 - 2024. All rights reserved.