いくつかのリンクを含む文字列があります。クリック可能なリンクに変換する必要がありますが、問題は、これらの多くが http または www で始まらないことです。文字列の残りの部分に誤って影響を与えずに変換するにはどうすればよいですか?
サンプル文字列: http://pastebin.com/bMe9pGbv
いくつかのリンクを含む文字列があります。クリック可能なリンクに変換する必要がありますが、問題は、これらの多くが http または www で始まらないことです。文字列の残りの部分に誤って影響を与えずに変換するにはどうすればよいですか?
サンプル文字列: http://pastebin.com/bMe9pGbv
まず、テキストからすべてのリンクを分離する必要があります。リンクにはスペースがないと想定しているため、スペースを区切り文字として使用して、explodeで配列を作成します。
$rows = explode(' ', $text);
次に、各行からリンクを特定し、http://
(リンクがない場合) 追加し、<a>
タグを追加します。
foreach ($rows AS $key => $row) {
if (preg_match("@^[^\.\n]+\.[^ \n]+$@", $row)) {
if (!preg_match('@^http://@', $row)) {
$row = 'http://' . $row;
}
$rows[$key] = '<a href="'.$row.'">'.$row.'</a>';
}
}
最後に、implodeとspace
区切り文字を使用して、テキストを再構築します。
$text = implode(' ', $rows);
実際の URL (スキームで始まる) を検出し、<a>
.
<?php
echo preg_replace(
"/(http:\/\/|ftp:\/\/|https:\/\/)([^\s,]*)/i",
"<a href=\"$1$2\">$1$2</a>",
$input
);
スキームで始まらない任意のクリック可能なリンクを検出するには、より複雑な正規表現と推測が必要です。