0

我在模板文件中使用了大量的 PHP 变量,其中一些变量需要可供只能使用 HTML 的编辑器访问。我真正想做的是让他们在键入/编辑内容时识别出类似 [ITEM_NAME_1] 的变量,PHP 会找到它们,因为它们被括在括号中,并用适当的 PHP 变量替换它们(在这种情况下,$ITEM_NAME_1 )

每个页面的内容都在一个变量“$page_content”中,所以现在我知道如何完成的唯一方法是手动编写行来替换我需要的内容。

$page_content = str_replace("[ITEM_NAME_1]", "$ITEM_NAME_1", "$page_content"); 
print $page_content

问题是有数百个“ITEM_NAME_X”变量,我不想为每个 ITEM_NAME_X 手动创建大量重复的“str_replace”行。

我想要完成的是让 PHP 在 $page_content 中找到包含在括号 [] 中的任何内容,从括号内获取名称并将其全部替换为该括号名称的变量。因此,如果它找到 [ITEM_5],它将用 $ITEM_5 替换它。这是可能吗?让我知道,谢谢。

4

3 回答 3

2

这是我用的:

public static function rewrite_curley($data,$message){

        if(is_array($data)){
            foreach($data as $key => $var){
                $find = '{'.$key.'}';
                $message = str_replace($find,$var,$message);
            }
            $message = preg_replace('/\{(.*)\}/','',$message); //strip any left over vars with out matches
        }
        return $message;

    }

显然我的变量在 {} 中,因此函数名称

于 2012-10-01T03:04:27.180 回答
0

preg_replace用修饰符/e试一试。将其与变量变量名语法结合起来以获得您想要的效果。

$page_content = preg_replace('/\[(.*?)\]/e', '$$1', $page_content);

这使用正则表达式来匹配方括号之间的字符串。字符串被捕获并$1在替换字符串中访问。第二个$查找以任何 in 命名的变量$1

如果你想对替换做一些更复杂的事情,你可以从替换字符串中调用你自己的函数。例如:

function substitute_tag($tag_name)
{
    $replacement_values = array('foo' => 'bar', 'baz' => '42', ...);
    return $replacement_values[$tag_name];
}

$page_content = preg_replace('/\[(.*?)\]/e', 'substitute_tag("$1")', $page_content);
于 2012-10-01T03:06:33.873 回答
0

为什么不简单地使用数组作为 str_replace 的参数?

str_replace(array('string1', 'string2'), array('replacement1', 'replacement2'), $page_content);

这样您就可以避免使用正则表达式。

于 2012-10-01T03:06:50.547 回答