• ベストアンサー

PHPを利用したキーワード自動リンクスクリプトを作成したいです。

Wikiの様な形で任意のキーワードに対して自動的にリンクを張るスクリプトを構築したいと考えています。 入力された文章をシンプルに検索・置換するだけであれば自分でも出来るのですが、文章内にHTMLタグが含まれている為、うまく動作しません。 例)「おむすび」というキーワードに対して自動リンクを張る場合 入力された文章: <a href="hoge.php" title="おむすびマン">おむすびマン</a>が作ったおむすび 検索・置換後の文章: <a href="hoge.php" title="<a href="omusubi">おむすび</a>マン"><a href="omusubi">おむすび</a>マン</a>が作った<a href="omusubi">おむすび</a> 上記の状況になっており、自分でも解決方法を模索したのですがいまいち思い浮かびません。正規表現の使い方次第で出来るような気がするのですが・・。 最終的には任意のHTMLタグに囲まれていないキーワードにのみ自動リンクを作成するという構造にしたいと考えています。 この問題を解決するにはどのようにスクリプトを組むとよいのでしょうか? 使用言語はPHPです、どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

>>この問題を解決するにはどのようにスクリプトを組むとよいのでしょうか? とりあえず、<a>タグだけに対応した例を示します <?php // 元の文字列 $str='<a href="hoge.php" title="おむすびマン">おむすびマン</a>が作ったおむすび'; // 結果表示 echo preg_replace_callback("/(<a.+?<\/a>)|(おむすび)/i", "addlink", $str); function addlink($match) { if ($match[0]!="おむすび") return $match[0]; else return '<a href="omusubi">おむすび</a>'; } ?>

love-uni
質問者

お礼

回答ありがとうございます。 理想通りの結果になりました! 少し修正すればaタグ以外にも対応できますね。 ありがとうございました!

その他の回答 (1)

noname#87667
noname#87667
回答No.1

昔作ったことがあります。確かにこれは苦戦しますね。 1.正規表現かstr_replaceで、aタグを別の文字列Xに置換→「Xが作ったおむすび」という文字列に変形 2.「Xが作ったおむすび」の「おむすび」にリンクを付与 3.文字列Xをaタグに戻す 1.の実装例 $s_hoge = str_replace(strtolower($keyword),"<?>".strtolower($keyword)."</?>",$hoge); $s_hoge = preg_replace('/('.strtolower($keyword).')/',"<?>".'$0'."</?>",$hoge); 3.の実装例 $hoge = str_replace("<?>","<a href=\"hoge.php\" title=\"おむすびマン\">",$s_hoge); $hoge = str_replace("</?>","</a>",$hoge); かなり大雑把ですが、こんな感じで作りました。ちなみに、preg_replaceよりstr_replaceの方が早いので、str_replaceを使ったというコメントを自分自身で残しています。

love-uni
質問者

お礼

回答ありがとうございました。 これで実現可能ですが、aタグの種類が複数ある場合対応できないですね・・・。 とりあえずは解決しました、ありがとうございました!

関連するQ&A

専門家に質問してみよう