プロが教えるわが家の防犯対策術!

正規表現について分からない点があり、質問させて頂きます。

いま、
[[link(http://hoge.com?id=123):リンク456]]
のように入力された部分を、
<a href="http://hoge.com?id=123">リンク456</a>
のように書き換える関数(CreLink())を作っています。

これ自体は作成することができ、機能したのですが、
本文中に記述されたURLをリンクに置き換える関数(EditURL())と競合してしまい、
結果的に正しく機能しないという状況が起きています。

function EditURL($string) {
$new_str = mb_ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\0\" rel=\"external\">\\0</a>", $string);
return $new_str;
}

具体的には、CreLink() で生成した
href="http://hoge.com?id=123"
の部分でも EditURL() が実行されてしまい、
<a href="<a href="http://hoge.com?id=123" rel="external">http://hoge.com?id=123"</a>>リンク456</a>
というふうに出力されてしまいます。

文中に入力されたURL部分をリンクに置き換えつつ、
[[link(http://hoge.com?id=123):リンク456]]
のように記述されている個所を
<a href="http://hoge.com?id=123">リンク456</a>
と置き換えるには、どうしたら良いでしょうか?

A 回答 (2件)

No.1の方とほぼ同じですが…



EditURL()を
[[link(http://hoge.com?id=123): http://hoge.com?id=123]]
と置き換えるものに変更。
EditURL()'→CreLink()の順番で実行。

と、私ならします。
    • good
    • 1
この回答へのお礼

なるほど。
その方が賢く出来そうですね。
挑戦してみます。

お礼日時:2008/06/10 09:02

非常に苦し紛れですが良い方法が思いつかないので…。



先にEditURL()を実行すると
[[link(http://hoge.com?id=123):リンク456]]

[[link(<a href="http://hoge.com?id=123" rel="external">http://hoge.com?id=123</a>):リンク456]]
になりますが、これを
<a href="http://hoge.com?id=123">リンク456</a>
に変換するというのはどうでしょう?

この回答への補足

私も一度はその方法を考えてみたのですが、やはり、一番手っ取り早いのはこれでしょうか。
この方法で行ってみようと思います。
ありがとうございました。

補足日時:2008/06/09 14:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング