听起来很简单,但今天我感觉非常愚蠢。
如果我有这样的数组:
$defined_vars = array(
'{POST_TITLE}' => $item['post']['name'],
'{POST_LINK}' => $item['post']['link'],
'{TOPIC_TITLE}' => $item['topic']['name'],
'{TOPIC_LINK}' => $item['topic']['link'],
'{MEMBERNAME}' => $txt['by'] . ' <strong>' . $item['membername'] . '</strong>',
'{POST_TIME}' => $item['time'],
'{VIEWS}' => $txt['attach_viewed'] . ' ' . $item['file']['downloads'] . ' ' . $txt['attach_times'],
'{FILENAME}' => $item['file']['name'],
'{FILENAME_LINK}' => '<a href="' . $item['file']['href'] . '">' . $item['file']['name'] . '</a>',
'{FILESIZE}' => $item['file']['size'],
'{DIMENSIONS}' => $item['file']['image']['width'] 'x' $item['file']['image']['height'],
);
这样的字符串:
$string = '<div class="largetext centertext">{POST_LINK}</div><div class="smalltext centertext">{MEMBERNAME}</div><div class="floatright smalltext dp_paddingright">{POST_TIME}</div><div class="dp_paddingleft smalltext">{VIEWS}</div>';
我需要将它替换为这些键的值。这可能吗?也许以某种方式使用str_replace()
?数组键是否允许在其中包含大括号?这会导致任何问题吗?此外,我需要这个替换所有这些找到的$ string值,因为它可能有超过1次所需的相同输出。例如,如果{POST_TITLE}
定义了两次,它应该将值两次输出到它们在字符串中使用它的位置。
由于
答案 0 :(得分:4)
str_replace支持数组。以下语法将执行此操作。
$string=str_replace(array_keys($defined_vars), array_values($defined_vars), $string);
数组键支持花括号,因为它在字符串中,字符串支持为数组是。
答案 1 :(得分:3)
foreach($defined_vars as $key=>$value) {
$string = str_replace($key,$value,$string);
}
这就像你问的那样使用str_replace,很容易看出发生了什么。 Php也有strtr或字符串翻译功能,只需这样做,所以你也可以使用
$string = strtr($string,$defined_vars);
但必须记住该功能的作用。
答案 2 :(得分:0)
<div class="largetext centertext">
<a href="<?=$item['post']['link']?>"><?=$item['post']['title']?></a>
</div>
<div class="smalltext centertext">
<?=$txt['by']?><strong><?$item['membername']?></strong>
</div>
<div class="floatright smalltext dp_paddingright"><?$item['time']?></div>
<div class="dp_paddingleft smalltext">
<?=$txt['attach_viewed']?>
<?=$item['file']['downloads']?>
<?=$txt['attach_times']?>
</div>
好吧,如果它是用户定义的字符串,则必须替换
$string = strtr($string,$defined_vars);
此外,我希望您过滤掉用户编辑的HTML,以防止他们窃取您的Cookie并以管理员或任何其他用户身份登录。
答案 3 :(得分:0)
是的,你的str_replace是合适的,只是foreach()循环你的数组
if(isset($defined_vars) and is_array($defined_vars))
{
foreach($defined_vars as $token => $replacement)
{
$string = str_replace($token,$replacement,$string);
}
}
您可能希望对变量应用一些过滤器,以确保您没有破坏HTML。