PHP将数组中的值替换为HTML字符串

时间:2012-04-27 05:13:44

标签: php arrays str-replace

听起来很简单,但今天我感觉非常愚蠢。

如果我有这样的数组:

$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}定义了两次,它应该将值两次输出到它们在字符串中使用它的位置。

由于

4 个答案:

答案 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。