问题
<?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¶m2=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¶m2=val" target="_blank">http://www.example.com/index.php?param1=val¶m2=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