5

私は現在、Twitter で動作する短い URL スクリプトに取り組んでいます。

現在、目的のツイート テキストを長い URL のテキストエリアに入力しています。これまでのところ、URLを検出する次のものがあります。

$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
if ( preg_match( $regex, $text, $url ) ) { // $url is now the array of urls
   echo $url[0];
}

ツイートを入力すると、次のようになります。

hi here is our new product, check it out: www.mylongurl.com/this-is-a-very-long-url-and-needs-to-be-shorter

次に、新しい URL の末尾に追加するランダムな文字をいくつか生成しているので、最終的には shorturl.com/ghs7sj のようになります。

クリックすると、shorturl.com/ghs7sj www.mylongurl.com/this-is-aver-long-url-and-needs-to-be-shorter にリダイレクトされます。これはすべてうまくいきます。

私の質問は、ツイートのテキストにまだ長い URL が含まれていることです。長い URL を短い URL に置き換える方法はありますか? 新しいコードが必要ですか? または、これを行うために上記を適応させることはできますか?

私の望む結果はこれです:

 hi here is our new product, check it out: shorturl.com/ghs7sj

これは wordpress に基づいているため、現在、すべての情報は posts および post_meta テーブルに保存されています。ツイートには 1 つの URL しかないことに注意してください。

4

2 に答える 2

6

PHP のstr_replace()関数をそのまま使用できますか? 何かのようなもの

str_replace($url, $short_url, $text);
于 2013-10-14T09:04:54.553 に答える
4

次を使用して、コールバック関数内で置換を行うことができますpreg_replace_callback()

$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
$text = preg_replace_callback($regex, function($url) { 
    // do stuff with $url[0] here
    return make_short_url($url[0]);
}, $text);
于 2013-10-14T09:04:08.893 に答える