我在整个代码中都有很多这样的调用,可以避免连续列上的任何反引号。
htmlentities(str_replace("`", "``", $row['column']), ENT_QUOTES);
我做了一个补充,要求该列替换#
宽度##
。由于大多数这些调用都是内联输出,我想在一行中找到解决方案。
我在想条件正则表达式(preg_replace_callback),但这是实现这一目标的最佳方法吗?所以我需要的是: 用2个反铲替换反铲,并用2个哈希替换哈希。 (这是出于逃避的目的)。
答案 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);