1

我正在对包含 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

4 回答 4

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.

于 2013-04-19T15:26:04.170 回答
0

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

于 2013-04-19T15:25:21.523 回答
0

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

preg_replace('/<a href="mailto/', '<a data-rel="external" target="_system" href="mailto', $html);
于 2013-04-19T15:33:26.960 回答
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>
于 2013-04-19T15:33:56.710 回答