• ベストアンサー

wiki文法のようにリンク生成

正規表現について分からない点があり、質問させて頂きます。 いま、 [[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> と置き換えるには、どうしたら良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Shin417
  • ベストアンサー率64% (9/14)
回答No.2

No.1の方とほぼ同じですが… EditURL()を [[link(http://hoge.com?id=123): http://hoge.com?id=123]] と置き換えるものに変更。 EditURL()'→CreLink()の順番で実行。 と、私ならします。

Il-Padrino
質問者

お礼

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

その他の回答 (1)

  • oka5130
  • ベストアンサー率66% (35/53)
回答No.1

非常に苦し紛れですが良い方法が思いつかないので…。 先に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> に変換するというのはどうでしょう?

Il-Padrino
質問者

補足

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

関連するQ&A