-1

複数の URL を含むテキストがあるとしましょう。その URL を抽出し、いくつかの変更を加えてテキストを表示したいと思います。

これが私が使用しているコードです

<?PHP
$text = "This is text with links http://google.com and www.yahoo.com";

$text = ereg_replace( "www\.", "http://www.", $text );
$text = ereg_replace( "http://http://www\.", "http://www.", $text );
$text = ereg_replace( "https://http://www\.", "https://www.", $text );

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

if(preg_match($reg_exUrl, $text, $url)) {

$text = preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);
echo $text;

}else{

echo "NO URLS";

}
?>

問題

// 出力ソース (最初のリンクについて繰り返します)

This is text with links <a href="http://google.com" rel="nofollow">http://google.com</a> and <a href="http://google.com" rel="nofollow">http://google.com</a>

配列に依存するため、最初の URL のみを取得$url[0]するため、テキスト内ですべてのリンクが見つかるようにするにはどうすればよいですか 〜 ありがとう

4

2 に答える 2

2

を使用できますpreg_match_all(...)。一致する配列を返します。次に、結果 ( ) をループし$matches、見つかった出現箇所を置き換えます。

于 2012-05-11T18:22:06.980 に答える
0

次の行を変更する

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

$reg_exUrl = "/((http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?)/";

$text = preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);

$text = preg_replace($reg_exUrl, '<a href="\1" rel="nofollow">\1</a>', $text);
于 2012-05-11T18:38:37.187 に答える