0

我有以下脚本超链接我网站上发布的任何链接:

    $text = trim($text);
    while ($text != stripslashes($text)) { $text = stripslashes($text); }    
    $text = strip_tags($text,"<b><i><u>");
    $text = preg_replace("/(?<!http:\/\/)www\./","http://www.",$text);
    $text = preg_replace( "/((http|ftp)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\" target=\"_new\">\\0</a>",$text);

但是,由于某种原因,如果我添加一个https://www.test.com链接,它最终会像这样显示 -https://http://www.test.com我做错了什么?我怎样才能使它也可以与 https 链接一起使用?它适用于 http 链接。谢谢!:-)

4

1 回答 1

1

您在此处拥有的lookbehind(?<!http:\/\/)www\.仅匹配http://,但您的测试输入(失败)是https://.

您也可以添加与当前链接链接的第二个后视以指定替代https://版本:

(?<!http:\/\/)(?<!https:\/\/)www\.

这将使您的整行看起来像:

$text = preg_replace("/(?<!http:\/\/)(?<!https:\/\/)www\./","http://www.",$text);

我最后一次检查,PHP 不支持可变长度的lookbehinds,所以可能熟悉的东西http[s]?://在这里不起作用——因此是第二种模式。

于 2013-06-04T15:35:26.560 回答