1

preg_matchまたはpreg_replaceを使用して段落をスキャンし、各パターンをリンクに置き換える方法はありますか?

例:

... [keyword][http://mysite.com/keyword/] ... [another-keyword][http://mysite.com/another-keyword] ...

これは次のようになります。

... <a href="http://mysite.com/keyword/">keyword</a> ... <a href="http://mysite.com/another-keyword/">another-keyword</a> ...

ありがとう。

4

2 に答える 2

1

何かのようなもの:

preg_replace('/\[([^\]]+)\]\[(https?:[^\]"]+)\]/i','<a href="$2">$1</a>',$string);

これは、すべてのリンクがhttp:またはhttps:で始まり、二重引用符が含まれていないことを前提としています。http://regexpal.com/は、これらのパターンを考え出す際の優れたツールです。

ただし、これらのタグを制御できる場合は、独自のタグを作成するのではなく、bbcodeなどの既存のタグ付けスキームを使用することをお勧めします。bbcodeを解析するための既存のコードはたくさんあり、思いつくものよりもはるかに堅牢で十分にテストされています。解析しようとしている文字列のソースを信頼できますか?これを台無しにして、厄介なセキュリティ問題を引き起こすのは本当に簡単です。

于 2012-04-26T21:45:00.947 に答える
1

使用するだけpreg_replace_callback()です:

$out = preg_replace_callback('!\[([^\[\]]+)\]\[([^\[\]]+)\]!', 'callback', $in);

function callback($m){
    return "<a href=\"$m[2]\">$m[1]</a>";
}
于 2012-04-26T21:45:55.920 に答える