仅在满足条件时才使用str_replace

时间:2013-04-19 15:22:28

标签: php

我正在对包含HTML字符串的变量执行str_replace。目的是将“data-rel =”external“target =”_ blank“”添加到所有a-href中。

$html = str_replace("<a href=", "<a data-rel=\"external\" target=\"_blank\" href=", $html);

它工作正常,但这是挑战:如果原始a-href是a-href =“mailto:[..],那么它应该添加”data-rel =“external”target =“_ system”“

示例:

<a href="http://apache.org">Link 1</a>

应该成为:

<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a>

<a href="mailto:post@apache.org">Link 2</a>

应该成为:

<a data-rel="external" target="_system" href="mailto:post@apache.org">Link 2</a>

任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

首先运行mailto str_replace,

$html = str_replace("<a href=\"mailto:", 
    "<a data-rel=\"external\" target=\"_system\" href=\"mailto:", $html);

执行此操作后,这些将不再受str_replace查找<a href的影响,因为它们将为<a data-rel

答案 1 :(得分:0)

我会测试"mailto:"中子字符串$html的外观,并根据是否为真运行不同的str_replace命令。

答案 2 :(得分:0)

在其他无法使用str_replace的情况下,preg_replace可能会变得很方便:

preg_replace('/<a href="mailto/', '<a data-rel="external" target="_system" href="mailto', $html);

答案 3 :(得分:0)

这对我有用

<?php
$html='<a href="http://apache.org">Link 1</a><a href="mailto:post@apache.org">Link 2</a>';
$html = str_replace('<a href="mailto', '<a data-rel="external" target="_system" href="mailto', $html);
$html = str_replace('<a href=', '<a data-rel="external" target="_blank" href=', $html);
echo $html;
?>

或者

<?php
$html='<a href="http://apache.org">Link 1</a><a href="mailto:post@apache.org">Link 2</a>';
$html = str_replace(array('<a href="mailto','<a href='), array('<a data-rel="external" target="_system" href="mailto','<a data-rel="external" target="_blank" href='), $html);
echo $html;
?>

输出

<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a>
<a data-rel="external" target="_system" href="mailto:post@apache.org">Link 2</a>