0

コードを Web サイトに配置するときに、すべての@#をリンクに変換しようとしています。

@#を検索するために正規表現を使用しているように見えるいくつかの Jquery コードを見つけましたが、PHP を使用して同じことを達成する方法がわかりません。

コードは次のとおりです。

  at: function(tweet) {
    return tweet.replace(/\B[@@]([a-zA-Z0-9_]{1,20})/g, function(m, username) {
      return '<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name=' + username + '">@' + username + '</a>';
    });
  },

  hash: function(tweet) {
    return tweet.replace(/(^|\s+)#(\w+)/gi, function(m, before, hash) {
      return before + '<a target="_blank" class="twtr-hashtag" href="http://twitter.com/search?q=%23' + hash + '">#' + hash + '</a>';
    });
  },

だから私はこのようなものを持っていた場合:

@BobBarker is going to #blahblah and also @BillyBob

検索して次のことを行う必要があります。

<a target="_blank" 
   class="twtr-atreply" 
   href="http://twitter.com/intent/user?screen_name=BobBarker'">@BobBarker
</a>

<a target="_blank" 
   class="twtr-atreply" 
   href="http://twitter.com/intent/user?screen_name=BillyBob'">@BillyBob
</a>

ハッシュタグも同様:

#blahblah

検索して次のことを行う必要があります。

<a target="_blank" 
   class="twtr-hashtag" 
   href="http://twitter.com/search?q=%23blahblah">#blahblah
</a>

どんな助けでも素晴らしいでしょう!

アップデート

私は、 @または#の最初の瞬間を見つけるのにうまく機能するが、ループし続けない PHP をいくつかまとめました。ループを設定するにはどうすればよいですか?

$theTweet = "@BobBarker is going to #blahblah and also @BillyBob";

if (preg_match("/\B[@@]([a-zA-Z0-9_]{1,20})/", $theTweet, $matches)) {
    $theTweet = str_replace($matches[0],'<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name=' . trim($matches[0]) . '"> ' . trim($matches[0]) . '</a> ',$theTweet);
    echo $theTweet . '<br />';
}

if (preg_match("/(^|\s+)#(\w+)/", $theTweet, $matches)) {
    $theTweet = str_replace($matches[0],'<a target="_blank" class="twtr-hashtag" href="http://twitter.com/search?q=%23' . trim($matches[0]) . '"> ' . trim($matches[0]) . '</a> ',$theTweet);
    echo $theTweet;
}

アップデート #2

私自身の質問に答えました:o)

4

4 に答える 4

0

http://php.net/preg_replaceで問題が解決するはずです。

このようなもの(テストされていません):

preg_replace("/ @([\w\d]+) /i", "<a href=\"http://twitter.com/$1/\">@$1</a>", $tweet);
于 2013-04-18T18:37:31.133 に答える
0

おそらく、jQuery と同じ動作を php 関数にラップすることができます。こんな感じです。

function writeLinks($tweet){
    //for mentions
    $tweet = preg_replace("/\B[@]([a-zA-Z0-9_]{1,20})/i", '<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name\=$1">$1</a>',$tweet);
    //for hashtags
    $tweet = preg_replace("/(^|\s+)#(\w+)/i", '<a target="_blank" class="twtr-hashtag" href="http://twitter.com/search\?q=%23$1>#$1</a>', $tweet);
    return $tweet;
}
于 2013-04-18T18:39:03.293 に答える
0

jQuery スクリプトが使用しているのは、ツイート内の @ と # を検索する単純な正規表現です。PHP の正規表現関数でも同様のことができます。

関数preg_replaceは、例の javascript 関数とほぼ同じです。

function tweetReplaceAt($tweet) {
  return preg_replace("/\B[@@]([a-zA-Z0-9_]{1,20})/",'<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name=$1">@$1</a>',$tweet);
}

function tweetReplaceHash($tweet) {
  return preg_replace("/(^|\s+)#(\w+)/i",'<a target="_blank" class="twtr-hashtag" href="http://twitter.com/search?q=%23$1">#$1</a>',$atreplacedTweet);
}

その後、ツイートでこれらの機能を使用できます。

preg_replaceまた、置換の量を制限する 4 番目のパラメーターと、関数呼び出し後の置換の量を含む 5 番目のパラメーターを取ります。

于 2013-04-18T18:40:08.947 に答える