• ベストアンサー

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> と置き換えるには、どうしたら良いでしょうか?

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • link要素の意味/使い方について(<link rel="?"なものが多いので

    <head></head> 内の、 <link rev="made" href="mailto:~" /> <link rel="next" href="~" /> は、 ●どういう意味あいで書くもので、 ●実際問題どのような影響があるのでしょうか? ●またどのような記述が正しいのでしょうか? また、<link .... / > というものをこれら以外にもみかけたのですが、 これらの意味についてお教えいただけないでしょうか? あるいは、これらについてのまとめサイト的なものはないでしょうか? (英語でもOK) http://www.kanzaki.com/docs/html/link.html に一部解説がありますが、この解説に掲載されていないものも、たくさん下記にあるようです。 //=========================================================== //ある個人サイトでみかけたもの <link rel="openid.delegate" href="~" /> <link rel="openid.server" href="~" /> <link rel="schema.geo" href="~" /> <link rel="meta" href="/info/webwho.rdf" type="application/rdf+xml" title="~" /> <link rel="meta" href="/w3c/pics-labels.rdf" type="application/rdf+xml" title="~" /> <link rel="alternate" type="text/html" hreflang="en" href="./index.html.en" /> <link rel="alternate" type="application/xml" href="/info/rss.rdf" title="RSS update information" /> <link rel="help" href="/info/navi" /> <link rel="copyright" href="/info/disclaimer" /> <link rel="shortcut icon" href="./favicon.ico" /> <link rev="made" href="mailto:webmaster@example.com" /> ※なお、その個人サイトでは、 <link rev="made" href="mailto:webmaster@example.com" />と記述しているにも関わらず。 本文にて、 「メールアドレスwebmaster@example.comは無効にしています。メッセージは******(別のメアド)にお送り下さい。」 これって、矛盾はしていないのでしょうか? //----------------------------------------------------------- (↓これはさすがにわかります) <link rel="stylesheet" href="/hoge.css" type="text/css" /> //=========================================================== //wikipediaでみかけたもの // http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 <link rel="alternate" type="application/x-wiki" title="編集" href="~" /> <link rel="apple-touch-icon" href="~/apple-touch-icon.png" /> <link rel="search" type="application/opensearchdescription+xml" href="~/opensearch_desc.php" title="Wikipedia (ja)" /> <link rel="copyright" href="~/fdl.html" /> <link rel="alternate" type="application/rss+xml" title="Wikipedia をRSSフィード" href="~" /> <link rel="alternate" type="application/atom+xml" title="Wikipedia をAtomフィード" href="~" /> ※話題が若干ずれますが、 RSSが、 「ある個人サイトでみかけたもの」では application/xmlとなっており、 wikipediaでは、application/rss+xml となっていますが、どちらのほうが望ましいのでしょうか? //----------------------------------------------------------- //=========================================================== //w3cでみかけたもの // http://www.w3.org/ <link rel="meta" href="/Overview-about.rdf" /> <link rel="bookmark" href="#technologies" title="Technologies |" /> <link rel="bookmark" href="#news" title="News |" /> <link rel="bookmark" href="#search" title="Search |" /> <link rel="contents" href="#contents" title="Contents |" /> <link rel="bookmark" href="#Offices" title="Offices |" /> <link rel="bookmark" href="#systems" title="Systems |" /> <link rel="bookmark" href="#donors" title="Supporters |" /> <link rel="bookmark" href="#footnotes" title="Footnotes |" /> <link rel="alternate" type="application/rss+xml" title="W3C Home Page News RSS Channel" href="http://www.w3.org/2000/08/w3c-synd/home.rss" /> ご存じの方がいらっしゃいましたら、お教えいただければ幸いです。 以上、よろしくお願いいたします。

  • link rel="stylesheet"について

    htmlについて質問です。 <link rel="stylesheet" type="text/css" href="_webfonts.css?1523592274603" id="webfont-css"> こういうCSSを適用させるための記述は何を意味しているのでしょうか? <link rel="stylesheet" type="text/css" href="_webfonts.css"> こういうような基本で学ぶような記述では駄目なのでしょうか?

    • ベストアンサー
    • HTML
  • コードをもっとスマートにする方法はありませんか?

    PHPを学び始めた者です。 現在自サイトのリンク集を動的に作成しております。 各ページのURLを読み込み特定URL文字があった場合は書き換えを行なっているのですが、数が多くなり(300件以上)コードが増えてきました。 出来るだけ管理しやすくスマートにしたいのですが何か方法ありませんか? ~略~ if(strstr($item['link'], "hoge1.")){ $blog = "<a href=\"http://hoge1.hogehoge.com/\">hoge1さん</a>"; }elseif(strstr($item['link'], "hoge2.")){ $blog = "<a href=\"http://hoge2.test.com/\">hoge2さん</a>"; }elseif(strstr($item['link'], "test3.")){ $blog = "<a href=\"http://test3.hogehoge.com/\">test3さん</a>"; }elseif(strstr($item['link'], "/")){ $blog = "<a href=\"http://#\">未登録</a>"; }; ~略~

    • 締切済み
    • PHP
  • インスタンス生成について

    いつもお世話になっております。 今回はインスタンス生成について質問させて下さい。 String クラスのインスタンス生成は、 String str1 = new String(); のように明示的に new 演算子を用いる方法と、 String str2 = "hoge"; のように生成する方法がありますよね。 str2 の方は、JVM が(?) 勝手にコンストラクタを呼び出してくれて、 インスタンスを生成してくれる、という認識でよいのでしょうか? また、明示的に「 new 演算子 + コンストラクタ」でインスタンスを生成する場合と、 そうでない場合の使い分けなどはあるのでしょうか? そもそも String 以外に、このような複数のパターンでインスタンスを生成することができる クラスは他にもあるのでしょうか? 以上、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • link.php 

    私はphpの初心者です。どなた様か知恵をお貸し下さい。 <a href="http://www.a.net/link.php?url=http://www.b.com/">  html上でこのように表記されてるphpで、aが自社のドメイン、bが他社のドメインです。  b.comへリンクを飛ばす際の、phpの記述の方法はあるのでしょうか?

    • 締切済み
    • PHP
  • javascriptでのリンク表示

    サンプル図(http://lancerevolution.tuzikaze.com/sampletest.html) main.htmlと言うページとmenu.htmlと言うページがあります。 main.htmlと言うページには、  ⇒<a href="b.html?url=http://yahoo.co.jp" target="_blank">Yahoo Japanへ!</a>  ⇒<a href="b.html?url=http://www.google.co.jp/" target="_blank">Googleへ!</a>  ⇒<a href="b.html?url=http://jp.msn.com/" target="_blank">msnへ!</a> と言う3つのリンクがあります。 この3つリンクの内どのリンクでもいいのでクリックした時に、サンプル図の(3)の部分に、  ⇒<a href="http://yahoo.co.jp" target="new">Yahoo Japanへ!</a>  ⇒<a href="http://www.google.co.jp/" target="new">Googleへ!</a>  ⇒<a href="http://jp.msn.com/" target="new">msnへ!</a> として出力することはできますでしょうか? つまり、main.htmlにあるリンクをクリックした時に、main.htmlの「b.html?url=」を含んでいる、リンク全てを(3)の部分に出力("b.html?url="の部分を削除、targetを"new"にして出力)できますか?ってことです。 もし、できるようならどのようなjavascriptが必要でしょうか?どうぞ、よろしくお願いします。

  • linkにid?

    <link rel='stylesheet' id='contact-form-7-css' href=' linkにidは付けられますか?

  • Chromeで内部リンクがリンク先にジャンプしない

    現在、ホームページの作成をしております。HTMLで内部リンクを設定したのですが、GoogleChromeにて1回目ジャンプ先に遷移せず、コンテンツの内容が少し上にずれてしまいます。再度クリックすると、内部リンク先にジャンプしますが、ずれてしまったコンテンツは直りません。 【具体例】 HTMLは以下のように記述しています。 <a href="#Hoge">Hogeへリンク</a> ・・・(1) HTMLsource <a id="Hoge" name="Hoge">Hogeのリンク先です</a> GoogleChrome6.0でテストしております。 お手数をお掛け致しますが、コンテンツのズレと内部リンクにジャンプしない事象の対応方法をご存知の方がおられましたらご教授頂きたく、宜しくお願い申し上げます。

    • ベストアンサー
    • HTML
  • クリックで特定のdiv要素が表示されるJavascriptに追加機能を

    クリックで特定のdiv要素が表示されるJavascriptに追加機能を持たせたい よろしくお願い致します。 下記のようなコードで、HTML部分の「リンクテキスト」をクリックすると「クリックで開く内容」が表示され、かつ、リンクテキスト(id="link-1")の文字色が変わるJavascriptを使用しています。 ■Javascript部分 function showHide(targetID) { if( document.getElementById(targetID)) { if( document.getElementById(targetID).style.display == "none") { document.getElementById(targetID).style.display = "block"; document.getElementById('link-1').style.color = "#cc0000"; } else { document.getElementById(targetID).style.display = "none"; document.getElementById('link-1').style.color = "#000000"; } } } ■HTML部分 <a href="#" id="link-1" onClick="showHide('hoge1');return false;">リンクテキスト</a> <div id="hoge1" style="display:none;">クリックで開く内容</div> リンクテキストの文字色が変わる部分は見よう見まねで追加したのですが、文字色が変わる部分を、link-2、link-3・・というように同ページに複数配置したい場合、どのようなコードに変更すればよいのでしょうか。 できればid="link-1"などという記述はせずに、showHide('hoge1');をshowHide('hoge2');に変えて、<div id="hoge1" style="display:none;">を<div id="hogge2" style="display:none;">に変えるだけで、文字色も変わるようにできれば一番良いのですが、そのような方法はあるのでしょうか? 分かりにくい箇所は補足説明致しますので、どうぞご教授下さいますようお願い致します。

  • リンクに触れると効果音がでる

    ブログでリンクに触れると効果音でるタグですが 下記のリンク部分には何処を指定するのでしょうか? <HTML> <HEAD> <TITLE>リンクに触れると音が鳴る</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- //リンク音を鳴らす function runSound() { document.all.link_sound.src='サウンドファイルのURL'; } // --> </SCRIPT> <BGSOUND src="#" id="link_sound" loop=1 autostart="true"> </HEAD> <BODY> <A href="リンク1のURL" onMouseOver="runSound()">リンク1</A><P> <A href="リンク2のURL" onMouseOver="runSound()">リンク2</A><P> <A href="リンク3のURL" onMouseOver="runSound()">リンク3</A><P> <A href="リンク4のURL" onMouseOver="runSound()">リンク4</A><P> <A href="リンク5のURL" onMouseOver="runSound()">リンク5</A><P> </BODY> </HTML> 又、どの部分をコピーすればよいのでしょうか? 何方かご教授をお願いします m(_ _)m

専門家に質問してみよう