在同一个变量上有多个preg_replace

Bjo*_*ern 0 php

在深入研究一些旧代码时,我偶然发现了一个用于preg_replace非常过分地清理特殊字符的函数.不幸的是,没有办法避免这种清理,混乱的数据从外部传来.

/* Example 1: current code */
$item = preg_replace('/' . chr(196) . '/',chr(142),$item);
$item = preg_replace('/' . chr(214) . '/',chr(153),$item);
$item = preg_replace('/' . chr(220) . '/',chr(154),$item);
Run Code Online (Sandbox Code Playgroud)

很多那些线都在那里,并且都做同样的事情(使用不同的字符),所以应该有更好的方法来做到这一点.我优化这个的第一个迭代是使用索引数组,如下所示:

/* Example 2: slightly optimized code */
$patterns = array();
$patterns[0] = '/'.chr(196).'/'; 
$patterns[1] = '/'.chr(214).'/';
$patterns[2] = '/'.chr(220).'/';

$reps = array();
$reps[0] = chr(142); 
$reps[1] = chr(153);
$reps[2] = chr(154);

$item = preg_replace($patterns,$reps,$item);
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但我想有一个更好和/或更快的方式来做这个更容易和更聪明 - 甚至可能没有preg_replace.由于清晨和/或缺乏好咖啡,我到目前为止无法找到它.

有什么建议?

hak*_*kre 6

至于你担心替换字符,你可以使用具有一个很好的数组参数的strtrDocs:

$map = array(
  chr(196) => chr(142), 
  chr(214) => chr(153),
  chr(220) => chr(154),
);

$item = strtr($item, $map);
Run Code Online (Sandbox Code Playgroud)