2013-03-15 41 views
0

基本上,我想实现的是动态替换{SOME_TAG}与“文本”的内容。
我的想法是读取所有标签,如{SOME_TAG},把它们放到数组。
然后转换数组键为变量,如$some_tag,并把它们放到数组。PHP替换字符串标签/占位符/标记与动态值

所以,这是我在多大程度上得到:

//Some code goes here 
$some_tag = "Is defined somewhere else."; 
$different_tag = 1 + $something; 
Some text {SOME_TAG} appears in different file, which contents has been read earlier. 
//Some code goes here 

preg_match_all('/{\w+}/', $strings, $search); 
$search = str_replace(str_split('{}'),"",$search[0]); 
$search = array_change_key_case(array_flip($search), CASE_LOWER); 
...some code missing here, which I cant figure out. 

更换阵列应该是这个样子

$replace = array($some_tag, $different_tag); 
//Then comes replacing code and output blah blah blah.. 

如何使阵列$replace包含变量动态地根据$search阵列?

+0

这没有意义。 – silkfire 2013-03-15 13:08:21

+0

您希望我们如何帮助..请正确编辑您的问题,以便其他人能够理解。另外请不要尝试复制粘贴代码。你不应该说“这里有些代码缺失,我无法弄清楚”?这是什么意思 ? – 2013-03-15 13:13:05

回答

5

为什么线沿线的不是:如果我理解正确

<?php 

$replace = array(
    '{TAG_1}' => 'hello', 
    '{TAG_2}' => 'world', 
    '{TAG_3}' => '!' 
); 

$myString = '{TAG_1} {TAG_2}{TAG_3}{TAG_3}'; 

echo str_replace(array_keys($replace), array_values($replace), $myString); 
+0

一开始这也是我的第一个想法。看起来这会更好。谢谢。 – user2173830 2013-03-15 14:01:48

1

你正在努力试图创建一个自定义的文件,使用{}标签以表示更换地区可以用动态信息填充。在用动态信息替换{TAGS}的某个时间点,您希望将动态信息存储在自动生成的基本变量名称中,如$ tags。

我不知道你为什么要替换使用它们完全是作为数组键,这些标记基本变量转换。我想指出的是,这代表安全或功能漏洞 - 如果有人将{REPLACE}作为标签放入文档中会发生什么情况?你的替换数组会被动态数据覆盖,你的整个程序会崩溃。要么是这样,要么就是整个替换数组将被转储到{REPLACE}中,从而导致一个非常混乱的文档,其中可能包含您不希望它们拥有的数据。也许你已经解决了这个问题 - 我没有这方面的全部内容 - 但我想我会指出风险因素。

对于一个更好的解决方案,除非有,你通过$标签去,而不是直接使用$代替阵列使用解决一些特定的需要,我喜欢@使者的答案。

+0

我以为我有好主意,但看起来你是对的。 – user2173830 2013-03-15 14:36:13