我有一个代码:
$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操作,但作者已删除它......
答案 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);
}