用preg_replace替换无效字符

时间:2015-03-10 19:47:37

标签: php regex

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

$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()的一个非常基本的功能,但我还没有能够弄明白。

谢谢!

3 个答案:

答案 0 :(得分:3)

这有效:

$patterns = array('/[áÁ]/u', '/[Éé]/u', '/[íÍ]/u', '/[óÓ]/u', '/[Úúü]/u',  '/[\s¿<>\?:,\n\r]/u');

帽子提示Peter Bowers

答案 1 :(得分:1)

也可以使用strtr()。这可能是&#34;经典&#34;解决这个问题的方法......

http://php.net/manual/en/function.strtr.php

答案 2 :(得分:-1)

不知道为什么你需要正则表达式。您可以简单地使用str_replace()

$replace_map = array(
    'á' => 'a',
    'é' => 'e',
    ...
    ',' => '-',
    "\n" => '-',
    "\r" => '-'
);
$str = str_replace(
    array_keys($replace_map),
    array_values($replace_map),
    strtolower($str)
);