在纯bash/php中使用多个特殊字符重命名文件


Rename file with multiple special characters in pure bash/php

有没有办法将类似"štupîd-(ƒ†le)-nÆmè.txt"的文件重命名为"tup-(le)-nm.txt",以便在bash或php中删除所有不支持的字符?

您必须使用一个字符类,并在字符类的开头定义除^所需之外的所有内容:

/[^'w-().]/

在线演示


PHP代码:

$str = 'štupîd-(ƒ†le)-nÆmè.txt';
echo preg_replace("[^'w-().]","",$str);
//=>tupd-(le)-nm.txt

使用php:

$str = 'štupîd-(ƒ†le)-nÆmè.txt';
echo preg_replace('~[^[:ascii:]]+~u', '', $str);

(由于处理UTF-8编码的字符串,因此需要使用u修饰符,否则正则表达式引擎将逐字节读取字符串,而不是逐字符读取。这可能会导致不必要的匹配)

echo iconv('UTF-8', 'ASCII//IGNORE', $str);

带bash:

iconv -c -f UTF-8 -t ASCII <(echo 'štupîd-(ƒ†le)-nÆmè.txt')

在php中,您可以使用preg_match

preg_replace('/[^A-Za-z0-9-.]/', '', $targetFileDirty);

以上内容将替换除字母、数字和点以外的所有内容。