2017-02-03 9 views
0

私はいくつかのコードを作成しています。私はそのテキスト本文内のイメージURLとウェブリンクを置き換えたいと思います。php preg_matchとpreg_replaceテキスト(urlタグとimageタグ)

EG「この私のhttp://www.google.comでテキストといくつかの画像http://www.somewebimage.pngされる」

は私のハックは、URL(複数可)を交換するために私を取得します

「これは私の<a href="http://www.google.com">http://www.google.com</a>でテキストといくつかの画像<img src="http://www.somewebimage.png">である」に置き換えまたはIMGのリンクではなくboth..oneはので、私は$ reg_exUrlコードブロックをブロックすると、それは私がURLリンクを取得し実行する場合、私は画像のリンクを取得するため

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 
$reg_exImg = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?(jpg|png|gif|jpeg)/'; 
$post = "This is my text with http://www.google.com and some image http://www.somewebimage.png"; 

if(preg_match($reg_exImg, $post, $img)) { 
    $img_post = preg_replace($reg_exImg, "<img src=".$img[0]." width='300' style='float: right;'> ", $post); 
} else { 
    $img_post = $post; 
} 
if(preg_match($reg_exUrl, $post, $url)) { 
    $img_post = preg_replace($reg_exUrl, "<a href=".$url[0]." target='_blank'>{$url[0]}</a> ", $post); 
} else { 
    $img_post = $post; 
} 

の上書きです。

+0

は、私は何をしようとしていることでパターンをテストするURLはリンクやIMGのURLが埋め込まれているシンプルなフィード.. –

+0

まず最初に、次のとおりです。preg_replace_callbackを使用すると、コールバック関数の置換文字列を選択することができます'preg_replace'でそれを使用する前の' preg_match'は役に立ちません。 –

+0

2つの場合に1つのパターンを使用し、 'preg_replace_callback'を使用して置換マスクを選択する必要があります。この方法では、すべてが1回のパスで行われ、何も上書きされません。コールバック関数では、 'parse_url'と' explode'を使って簡単にファイル拡張子を抽出することができます。 –

答えて

0

1回のパスで2つのパターンが非常に似ていて、2つのケースを処理するパターンを作成するのは簡単です。

$post = "This is my text with http://www.google.com and some image http://www.domain.com/somewebimage.png"; 

# the pattern is very basic and can be improved to handle more complicated URLs 
$pattern = '~\b(?:ht|f)tps?://[a-z0-9.-]+\.[a-z]{2,3}(?:/\S*)?~i'; 
$imgExt = ['.png', '.gif', '.jpg', '.jpeg']; 
$callback = function ($m) use ($imgExt) { 
    if (false === $extension = parse_url($m[0], PHP_URL_PATH)) 
     return $m[0]; 

    $extension = strtolower(strrchr($extension, '.')); 

    if (in_array($extension, $imgExt)) 
     return '<img src="' . $m[0] . '" width="300" style="float: right;">'; 
    # better to do that via a css rule --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    return '<a href="' . $m[0] . '" target="_blank">' . $m[0] . '</a>'; 
}; 

$result = preg_replace_callback($pattern, $callback, $post); 
+0

偉大な働きました、はい私はそれを行うことができなかったちょうど1つの簡単な方法があったことを知っていました..早朝のコーディング.. –