有没有办法将类似"š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);
以上内容将替换除字母、数字和点以外的所有内容。