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

发布于 2024-12-19 13:39:00 字数 867 浏览 0 评论 0原文

我有一个代码:

$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);

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

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

I have a code:

$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);

Above will replace [LINK] and [IMAGE] with corresponding $post values - this is good when both values are not empty. I need a way to hide the corresponding paragraph when one or more $post values are empty. Anyone has an idea what would be the most efficient solution?
$html content is loaded using file_get_contents (the above is just an ilustration of its content).

EDIT: Since in the $html I also have "localized" strings, I'd rather use the solution that doesn't force me to replace the whole paragraph. There was a good answer that used DOM manipulation but the author has deleted it...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

意中人 2024-12-26 13:39:00
$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();
$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);

Now [LINK] and [IMAGE] are replace with the whole tag if they are present, and an empty string if not.

Depending on how you generate the $post array, you may need to use some condition other than empty() to determine whether they are present, but you get the idea.

EDIT

Since these appear to be email template files, I would suggest using the templating functionality of PHP and put some PHP code inside the templates.

Template file

<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 script

ob_start();
include('template.html');
$html = ob_get_clean();
虐人心 2024-12-26 13:39:00

你可以这样做:

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);
}

You can do:

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文