0

文字列を自動的に解析し、自分のサイトへのリンクが存在するかどうかを確認し、アドレスをクリック可能な HTML リンクに自動的に置き換える必要があります。

私のサイトのアドレスが www.mysite.com + wap.mysite.com + m.mysite.com であるとすると、次のように変換する必要があります。

My pictures at m.mysite.com/user/id are great.

に:

My pictures at <a href="/user/id" target="_blank">mysite.com/user/id</a> are great.

問題は、大量のコード行を使用する代わりに (ereg_replace? を使用して) これを行う方法です

現在のプロトコルとサブドメインがターゲット リンクに使用されるように、結果は相対 URL でなければならないことに注意してください。ユーザーが HTTPS バージョンの m サブドメインにいる場合、ターゲットは HTTPS プロトコルの m サブドメインになります。mysite.com へのリンクのみをリンクする必要があり、その他のリンクは通常のプレーン テキストとして扱う必要があります。前もって感謝します!

4

1 に答える 1

2

最初のアドバイスは、eregに近づかないことです。これは長い間廃止されてきました。第二に、おそらくググって実験して、自分に適したpreg式を作成することができるので、ここにあるものをニーズに合わせて微調整してください.

URL を検索するためのかなり単純な正規表現パターンをまとめることができました。

preg_match("/m.mysite.com\S+/", $str, $matches);

URL を取得したら、正規表現ではなくparse_urlをお勧めします。

そして、ここにコードがあります

$sSampleInput = 'My pictures at http://m.mysite.com/user/id are great.';

// Search for URLs but don't look for the scheme, we'll add that later
preg_match("/m.mysite.com\S+/", $sSampleInput, $aMatches);

$aResults = array();
foreach($aMatches as $sUrl) {
    // Tack a scheme afront the URL
    $sUrl = 'http://' . $sUrl;

    // Try validating the URL, requiring host & path
    if(!filter_var(
        $sUrl,
        FILTER_VALIDATE_URL,
        FILTER_FLAG_HOST_REQUIRED|FILTER_FLAG_PATH_REQUIRED)) {
        trigger_error('Invalid URL: ' . $sUrl . PHP_EOL);
        continue;
    } else
        $aResults[] =
            '<a href="' . parse_url($sUrl, PHP_URL_PATH) .
            '" target="_blank">' . $sUrl . '</a>';
}
于 2013-05-05T23:35:16.287 に答える