preg_replace links in text with <a> with some exception

只谈情不闲聊 提交于 2020-01-15 19:18:01

问题


<?php
// I have a string, something like this:
$string = '
    Lorep ipsum <a href="http://www.example.com">example</a> lorem ipsum
    lorem ipsum http://www.example.com/index.php?param1=val&param2=val lorem ipsum
';
// I need to do some magick with preg_replace and get string like this:
$string = '
    Lorep ipsum <a href="http://www.example.com" target="_blank">example</a> lorem ipsum
    lorem ipsum <a href="http://www.example.com/index.php?param1=val&param2=val" target="_blank">http://www.example.com/index.php?param1=val&param2=val</a> lorem ipsum
';

?>

So basicly, I want to linkify URLs in text that are not wrapped in <a></a> and add target="_blank" to those that are.

Can anyone help me with this?


回答1:


$string = preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $string);

this will add an extra target=\"_blank\" incase it is already set.

$string = preg_replace("/<a (href=".*?").*?>/", "<a $1 target="_blank">", $string);

this will make sure that only one target="_blank" is added in the URL

example:- http://www.phpliveregex.com/p/6qG




回答2:


This will add the target:

$string = preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $string);

This is a crude way of detecting URLs and making them into links (this is brittle):

$string = preg_replace("/(http[^\ ]+)/", "<a href=\"$1\" target=\"_blank\">$1</a>", $string);



回答3:


First, I would use some XML/HTML processing library, to get text between tags, then using simple regex:

PHP validation/regex for URL

make all URLs as links.




回答4:


$result = preg_replace(
  "/(?<![\>https?:\/\/|href=\"'])(?<http>(https?:[\/][\/]|www\.)([a-z]|[A-Z]|[0-9]|[\/.&?= ]|[~])*)/",
  "<a href=\"$1\">$1</a>",
  $string
);


来源:https://stackoverflow.com/questions/10845369/preg-replace-links-in-text-with-a-with-some-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!