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

ここにある後読み(?<!http:\/\/)www\.は一致するだけですhttp://が、テスト入力(失敗しています)はhttps://です。

現在のものと連鎖した2番目の後読みを追加して、代替https://バージョンも指定できます。

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

これにより、完全な行が次のようになります。

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

最後に確認したところ、PHP は可変長の後読みをサポートしていないため、http[s]?://ここでは機能しないなどのよく知られた機能が使用されます。つまり、2 番目のパターンです。

于 2013-06-04T15:35:26.560 に答える