2011-01-14 4 views
3

これは本当にシンプルで明白な答えだと確信していますが、私の脳は揚げられており、私はそれを得ることができません。私は、ユーザーがmySQLのテキストフィールドに情報を投稿できるようにするPHPサイトを持っています。投稿はすべてオンラインで見ることができます。このフィールドは、ポスト/編集モードのHTMLフォームのテキストエリアと、読み取りモードの静的テキストです。ユーザーは自分の投稿にURLを含めることができ、HTMLをフィールドに含めることなくクリック可能なリンクとして表示できるようにしたいと考えています(これは私にはできないようにしたい - あまりにも危険です)。これは、データベースに保存されたときにテキストにhtmlを挿入するのではなく、データが表示されたときに行う必要がある処理です。PHPのページでテキストURLをクリック可能なリンクに変換するにはどうすればよいですか?

表示のためのコードは非常に簡単です:

$query = "SELECT * FROM meetings where id=".$_GET['id']; 
$result = mysqli_query($dbc, $query) or die('Error querying database'); 
$rows = mysqli_fetch_array($result); 

echo "<p><div id=\"articleBody\">". $rows['body']. "</div></p>"; 

は、私は周りのクリック可能なリンクとしてhttpで始まる何も表示されます$行[「体」]を置くことができる機能がありますか?変数には実際にはURLが含まれていてもいなくてもかまいません。

+5

ああ良さ - あなたが実際にそのようなクエリに$ _GET変数権利を挿入していますか?それをエスケープするか、または準備されたステートメントを使用する必要があります。 – barfoon

+0

など。 yourwebsite.com/article.php?id=''%20OR%201%3D1 。悪化します。 – jerluc

+0

@barfoon - いいえ、ライブコードでエスケープしました。私はFTPの問題を抱えていて、このポストにコピー/ペーストすることができなかったので、私は怠け者であり、ちょっとしたことを繰り返すのではなく、基本を教えてくれました。 – EmmyS

答えて

6

使用preg_replaceこれを実現するために:

$html = preg_replace('"\b(http://\S+)"', '<a href="$1">$1</a>', $rows['body']) 
echo "<p><div id=\"articleBody\">".$html."</div></p>"; 
+0

+1すごくいいよ! :) – Ben

+0

ありがとう!何らかの理由で私はそれを行うネイティブPHP関数があると考えていました。しかし、これは私が必要としていたものです。 – EmmyS

0
$out = $rows['body']; 

echo "<p><div id='articleBody'>"; 

if(substr($out,0,4)=='http') { echo "<a href='#'>".$out."</a>"; } 
else { echo $out; } 

echo "</div></p>"; 
+0

これは、リンクテキストを本文フィールドの値全体にしませんか?それは私が必要とするものではありません。フィールドには、リンクが含まれていてもいなくてもよい複数の段落のテキストを含めることができます。 – EmmyS

関連する問題