0

PHP では、ユーザーが次のように入力した場合に、次のようにします。

[LINK] url [/LINK]

それはアンカータグに置き換えられます:

<a href=url>url</a>

これをどのように示しますか?これを正規表現に変換する方法がわかりません...

私は次のことを試しました:

[LINK][a-zA-Z0-9_-.]+[/LINK]

しかし、明らかにそれは正しくありません:(

4

2 に答える 2

1
$str = '[LINK]http://google.com[/LINK]';
$str = preg_replace('/\[link\]([^\[\]]+)\[\/link\]/i', '<a href="$1">$1</a>', $str);

echo $str; // <a href="http://google.com">http://google.com</a>

説明:

\[link\]    Match "[LINK]"
([^\[\]]+)  Match any character except "[" and "]"
\[\/link\]  Match "[/LINK]"
i           Make it case-insensitive
于 2012-06-08T12:28:14.813 に答える
0

リンクをキャッチしますが、常に先頭にhttp://またはhttps://が必要です。それ以外の場合、URL はexample.com/google.comになります。また、サニタイズされていない入力を xss できるようにpreg_replace_callback()を使用する必要があります。

ここではいくつかの例を示します。

<?php
//The callback function to pass matches as to protect from xss.
function xss_protect($value){
    if(isset($value[2])){
        return '<a rel="nofollow" href="'.htmlentities($value[1]).'">'.htmlentities($value[2]).'</a>';
    }else{
        return '<a rel="nofollow" href="'.htmlentities($value[1]).'">'.htmlentities($value[1]).'</a>';
    }
}


$link ='[LINK]http://google.com[/LINK]';
$link = preg_replace_callback("/\[LINK\](.*)\[\/LINK\]/Usi", "xss_protect", $link);
echo $link;
?>
<a rel="nofollow" href="http://google.com">google.com</a>

または、リンクから http:// と https:// を取り除き、出力時に追加します。

<?php
$link ='[LINK]google.com[/LINK]';
$link = preg_replace_callback("/\[LINK\](.*)\[\/LINK\]/Usi", "xss_protect", str_replace(array('http://','https://'),'',$link));
echo $link;
?>
<a rel="nofollow" href="http://google.com">google.com</a>

または、別の方法で BB コード リンクを作成すると、リンク アドレスからリンク名を指定できます。コールバック関数を使用して、複数のタイプの出力を処理できます。

<?php
$link ='[LINK=google.com]Google[/LINK]';
$link = preg_replace("/\[LINK=(.*)\](.*)\[\/LINK\]/Usi", "xss_protect", str_replace(array('http://','https://'),'',$link));
echo $link;
?>
<a rel="nofollow" href="http://google.com">Google</a>
于 2012-06-08T12:45:01.150 に答える