php/doc-en

escapeshellarg() strips off bytes which are not valid characters (leading to file not found errors)

已關閉

#3,052 建立於 2023年12月30日

 (6 則留言) (0 個反應) (0 位負責人)XML (882 個分叉)auto 404
Status: Verifiedgood first issue

倉庫指標

星標
 (596 顆星)
PR 合併指標
 (平均合併 99天 23小時) (30 天內合併 90 個 PR)

描述

Description

It seems escapeshellarg() strips off bytes which are >= 128 probably because they are not valid UTF-8 characters.

Because it's not possible to provide an encoding to escapeshellarg() and this behaviour is not documented I think it's a bug.

Also if this is expected behaviour then which function could be used instead? There is no other function which could do this.

Please note that the code example runs on Linux only because Windows (probably) doesn't have the cat command. Also I tested this on Linux only. Also note it's not necessary to close the php tag.

<?php
$fname = "asdf.txt".chr(128);
file_put_contents($fname, "hey!");
$cmd = "cat ".escapeshellarg($fname);
echo "cmd: $cmd\n";
passthru($cmd);

Resulted in this output:

cmd: cat 'asdf.txt'
cat: asdf.txt: No such file or directory

But I expected this output instead:

cmd: cat 'asdf.txt'$'\200'
hey!

PHP Version

PHP 8.2.7 (cli) (built: Jun 9 2023 19:37:27) (NTS)

Operating System

Debian GNU/Linux 12 (bookworm)

貢獻者指南