将无效字符替换为 preg_replace


Replace invalid characters with preg_replace

我想用以下代码替换文件名中的无效字符:

$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)
);