在深入研究一些旧代码时,我偶然发现了一个用于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.由于清晨和/或缺乏好咖啡,我到目前为止无法找到它.
有什么建议?
至于你担心替换字符,你可以使用具有一个很好的数组参数的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)
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |