我想用以下代码替换文件名中的无效字符:
$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
,它会在这里和那里添加一些&#39;以及总共43个替换。他们来自哪里?这超过了字符串的总字符数。
可能,我忽略了preg_replace()
的一个非常基本的功能,但我还没有能够弄明白。
谢谢!
答案 0 :(得分:3)
这有效:
$patterns = array('/[áÁ]/u', '/[Éé]/u', '/[íÍ]/u', '/[óÓ]/u', '/[Úúü]/u', '/[\s¿<>\?:,\n\r]/u');
帽子提示Peter Bowers
答案 1 :(得分:1)
也可以使用strtr()。这可能是&#34;经典&#34;解决这个问题的方法......
答案 2 :(得分:-1)
不知道为什么你需要正则表达式。您可以简单地使用str_replace()
。
$replace_map = array(
'á' => 'a',
'é' => 'e',
...
',' => '-',
"\n" => '-',
"\r" => '-'
);
$str = str_replace(
array_keys($replace_map),
array_values($replace_map),
strtolower($str)
);