我想用以下代码替换文件名中的无效字符:
$str="ÁsícáLáÓ Pá LáS NÉnÁ BíÉn HéRéJÉs óézíí";
$count;
$patterns = array('/[áÁ]/', '/[Éé]/', '/[íÍ]/', '/[óÓ]/', '/[Úúü]/', '/['s¿<>'?:,'n'r]/');
$replacements = array('a', 'e', 'i', 'o', 'u', '-');
$str = strtolower($str);
$str = preg_replace($patterns, $replacements, $str, -1, $count);
print_r($str);
echo $count;
我不需要清理输入,只需替换这些字符即可。
我的输出是这样的:-aasaicaalaaao-paa-laas-naenaa-baiaen-haeraejaes-aoaezaiai
,它在这里和那里添加了一些 'a',并汇总了 43 个替换。他们从哪里来?这比字符串的字符总数还要多。
可能,我忽略了preg_replace()
的一个非常基本的功能,但我无法弄清楚。
谢谢!
这有效:
$patterns = array('/[áÁ]/u', '/[Éé]/u', '/[íÍ]/u', '/[óÓ]/u', '/[Úúü]/u', '/['s¿<>'?:,'n'r]/u');
帽子提示给彼得鲍尔斯
也试试 strtr()。这也许是解决这个问题的"经典"方法......
http://php.net/manual/en/function.strtr.php
不知道为什么这里需要正则表达式。 您可以简单地使用str_replace()
。
$replace_map = array(
'á' => 'a',
'é' => 'e',
...
',' => '-',
"'n" => '-',
"'r" => '-'
);
$str = str_replace(
array_keys($replace_map),
array_values($replace_map),
strtolower($str)
);