0

我需要将文章中的url转换为3g域。

例如,我需要转换

这是链接:http://www.mydomain.com/index 谢谢

链接在这里:<a href='http://3g.mydomain.com$4' target='_self'>http://3g.$3.com$4</a> thanks

不要转换其他域,只转换 mydomain。这是代码:

$c = "/([^'\"=])?http:\/\/([^ ]+?)(mydomain)\.com([A-Za-z0-9&%\?=\/\-\._#]*)/";
$b=preg_replace($c, "$1<a href='http://3g.$3.com$4' target='_self'>http://3g.$3.com$4</a>",$b);

它工作得很好,但如果文字是这样的:

<a href="http://www.mydomain.com/44" target="_blank" class="blue">a link</a>

它将返回错误的结果,如下所示:

<a href="<a href='http://3g.mydomail.com/44' target='_self'>http://3g.mydomain.com/44</a>" target="_blank" class="blue">a link</a>

但我需要结果

<a href="http://3g.mydomain.com/44" target="_blank" class="blue">a link</a>

我应该怎么做?

4

2 回答 2

1

您应该执行以下操作:

  1. 从现有超链接中去除目标属性
  2. Rewrite hyperlinks in href attributes
  3. Rewrite any other hyperlinks

    $plain = "http://([^ ]+?)(mydomain)\.com(/?[^'\"\s]*(?=['\"\s]))";

    $plain_replace = "http://3g.$3.com$4";

    $in_href = "href=(['\"])" + plain + "(['\"])";

    $in_href_replace = "href='http://3g.$3.com$4' target='self'";

    $strip_target = "target=['\"][^'\"]*['\"]";

    ...

So:

  1. Replace $strip_target with ""

  2. Replace $in_href with $in_href_replace

  3. Replace $plain with $plain_replace

(The regexes are tested to work in C#, you might have to adjust the \ escaping to suit the php regex rules.)

于 2012-08-23T07:15:08.077 回答
0

摆脱?正则表达式中的第一个。这允许没有前面的字符。

或者,也许更符合您的意图,如果您想在开头允许 URL,您可以替换:

([^'\"=])?

和:

(^|[^'\"=])

...如果在一开始就允许链接,或者如果前面没有引号等,但不是其他的。

于 2012-08-23T02:58:14.527 回答