用多个替换器替换多个字符

时间:2014-09-01 07:15:07

标签: php regex

我在整个代码中都有很多这样的调用,可以避免连续列上的任何反引号。

htmlentities(str_replace("`", "``", $row['column']), ENT_QUOTES);

我做了一个补充,要求该列替换#宽度##。由于大多数这些调用都是内联输出,我想在一行中找到解决方案。

我在想条件正则表达式(preg_replace_callback),但这是实现这一目标的最佳方法吗?所以我需要的是: 用2个反铲替换反铲,并用2个哈希替换哈希。 (这是出于逃避的目的)。

4 个答案:

答案 0 :(得分:4)

str_replace()支持数组参数:

// translation map:
$map = [
    '`' => '``',
    '#' => '##'
];

// what to replace:
$from = array_keys($map);

// replace by what:
$to   = array_values($map);

echo htmlentities(str_replace($from, $to, $row['column']), ENT_QUOTES);

在极少数情况下,这需要您缩小代码,您可以尝试使用它:

echo htmlentities(str_replace([ '`', '#' ], [ '``', '##' ], $row['column']), ENT_QUOTES));
//                            ^             ^
//                        from what     by what

答案 1 :(得分:3)

documentation of str_replace中所述,您可以使用可以使用数组:

str_replace(["`", "#"], ["``", "##"], $row['column']);

答案 2 :(得分:3)

如果有人愿意使用正则表达式:

preg_replace("/`|#/", "$0$0")

答案 3 :(得分:2)

这很容易,只需使用数组作为str_replace

的参数
htmlentities(str_replace(array("`","#"), array("``","##"), $row['column']), ENT_QUOTES);