如果相应的值不为空,则替换标签,否则不显示

时间:2011-12-05 09:49:57

标签: php replace

我有一个代码:

$html = '<html>
            <body>
                <p><a href="[LINK]">[LINK]</a></p>
                <p><img src="[IMAGE]" alt="something" /></p>
                <p>Language specific string: [ANOTHER TAG]</p>
            </body>
         </html>';
$search = array('[LINK]', '[IMAGE]');
$replace = array($post['link'], $post['image']);
$html = str_replace($search, $replace, $html);

上方会将[LINK][IMAGE]替换为相应的$post值 - 当两个值都不为空时,这很好。当一个或多个$post值为空时,我需要一种隐藏相应段落的方法。任何人都知道什么是最有效的解决方案?
使用$html加载file_get_contents内容(以上只是其内容的ilustration)。

编辑:由于在$html我也有“本地化”字符串,我宁愿使用不强迫我替换整个段落的解决方案。有一个很好的答案,使用DOM操作,但作者已删除它......

2 个答案:

答案 0 :(得分:1)

$html = '<html>
            <body>
                [LINK]
                [IMAGE]
            </body>
         </html>';
$search = array('[LINK]', '[IMAGE]');
$replace = array(
  (!empty($post['link'])) ? "<p><a href=\"{$post['link']}\">{$post['link']}</a></p>" : '', 
  (!empty($post['image'])) ? "<p><img src=\"{$post['image']}\" alt=\"something\" /></p>" : ''
);
$html = str_replace($search, $replace, $html);

现在[LINK][IMAGE]将替换为整个标记(如果存在),如果不存在则替换为空字符串。

根据您生成$post数组的方式,您可能需要使用empty()以外的某些条件来确定它们是否存在,但您明白了。

修改

由于这些似乎是电子邮件模板文件,我建议使用PHP的模板功能并在模板中放置一些PHP代码。

模板文件

<html>
  <body>
<?php if (!empty($post['link'])) { ?>
    <p><a href="<?php echo $post['link']; ?>"><?php echo $post['link']; ?></a></p>
<?php } if (!empty($post['image'])) { ?>
    <p><img src="<?php echo $post['image']; ?>" alt="something" /></p>
<?php } if (!empty($post['another_tag'])) { ?>
    <p>Language specific string: <?php echo $post['another_tag']; ?></p>
<?php } ?>
  </body>
</html>

PHP脚本

ob_start();
include('template.html');
$html = ob_get_clean();

答案 1 :(得分:0)

你可以这样做:

if (empty($post['link']) || empty($post['image'])) {
    $html = str_replace('<p><a href="[LINK]">[LINK]</a></p>', '', $html);
    $html = str_replace('<p><img src="[IMAGE]" alt="something" /></p>', '', $html);
}