PHP preg_replaceのリンク作成

このQ&Aのポイント
  • PHPで掲示板にメッセージを表示する機能を作成したい
  • メッセージのリンクにはA_idとB_idのパラメータが必要
  • preg_replaceを使用してリンクを作成する際にB_idに変数を設定できない
回答を見る
  • ベストアンサー

PHP preg_replace のリンク作成

PHPで作成している掲示板にて、 本文中の「>>5」を押すと、A_id=10&B_id=3 のメッセージを表示する機能を作っています。 10が「A_id」となります。 イメージ:http://XXXX.jp/show.php?A_id=10&B_id=3 $str = preg_replace('/^>>([0-9]+)/','<a href="show.php?A_id=\\1&B_id=★">\\0</a>',$str); A_id=\\1 には10など数字が設定できてます。 B_id=の★部分に、3などの数値を「変数」で設定することができません。 ($B_id_num など) どのようにすればよいのでしょうか?

noname#152215
noname#152215
  • PHP
  • 回答数1
  • ありがとう数6

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

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.1

preg_replace() の引数は、正規表現を含む「文字列」に過ぎません。 従って、次のように変数の値から正規表現文字列を生成すればOKです。 $str = preg_replace(  '/^>>([0-9]+)/',  '<a href="show.php?A_id=\\1&B_id=' . $B_id_num . '">\\0</a>',  $str ); 必要に応じて sprintf() などを使って下さい。

関連するQ&A

  • preg_replaceについての質問です

    掲示板用のスクリプトなんですが、 >>(数字) をURLに変換するのはどうすればいいのでしょう? $message = preg_replace("/>>(\d+)/","<a href=\"#$1\">&gt;&gt;$1</a>",$message);

    • ベストアンサー
    • PHP
  • str_replaceとpreg_replace

    phpで、汎用環境で文字化けしそうな文字を,ad hoc に機種依存しない文字に置換する過程に関して質問させて頂きます。 例えば(株)を(株)に、置換等です。 宜しくお願いいたします。 こちらのページのコードで、 http://memo.xight.org/2006-06-19-13 もともと、以下のようなコードサンプルA(推測)が、 -----▼サンプルA $arr=array('\xE3\x8A\x91' => '(株)',………); foreach ($arr as $key => $val) {  $str_rep = preg_replace("/$key/", $val, $str_rep); } -----▲ こちらの方の指摘で、 http://blog.poyo.jp/archives.php/categ-1/year-2006/month-6/id-1150817399 -----▼サンプルB $arr=array('\xE3\x8A\x91' => '(株)',………); return str_replace( array_keys( $arr), array_values( $arr), $str); -----▲ コードサンプルBに、変更(改善?)されたようです。一見、なるほどと思うのですが、実際にサーバ上で試したところコードサンプルAは問題なく機能しますが、コードサンプルBは機能しません。(特殊文字にマッチしない) 私の環境の問題で機能しないだけなのか、サンプルBを提示していた方の早まりなのか、判断がつかずに困っています。 ただし、'\xE3\x8A\x91'のようなユニコード文字列を、(株)といった文字に打ち変えて実行すると、きちんと認識して、置換が行われます。 str_replaceとpreg_replaceの機能の違いによるものだと思ったのですが、今回、このコードを利用し、80,000件位のコメントに置換をかけようとしているため、少しでも早く軽く置換できる方法を探しております。 見た目的にはループで走査していくよりも、str_replaceでスパっと置換した方が早そうに感じるので、できるならばサンプルBのような書き方で置換する様をベンチマークしたいと考えております。 なぜ、コードサンプルBが機能しないのか、また、正常に機能させるためには何が必要なのか、アドバイス・ご教示頂けましたら幸いです。 ちなみにコードサンプルAの元は、以下かと思いますが、こちらはまったく問題なく機能することが確認できています。 http://www.happytrap.jp/blogs/2009/09/11/1393/

    • ベストアンサー
    • PHP
  • preg_replace

    $img_ref = '<a target="_blank" href="http://aaa/aaa/.com/'.$_POST[bbs].'/img/'.$_POST['key'].$imgnum.$tail.'">'; 上記みたいな画像掲示板のスクリプトの画像URLリンク先を示す箇所で、preg_replaceを使って「http://」と「aaa/aaa.com」の間にbbb/bbb/image.cgi?を入れたいと思います。 ↓こんな感じかなーと思いつつあやっぱりできません。 $img_ref = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "<a href=\"$1://bbb/bbb/image.cgi?$2\" target=\"_blank\">", $img_ref); だれか知ってる方何卒宜しくお願いします。

    • ベストアンサー
    • PHP
  • preg_replaceにおけるeオプション

    文字列$strは、「aa:bb」という文字列を含み、$flagが1のときは、この部分を「aa」に。0のときは「bb」に置き換えるという処理で、 $str = preg_replace("/(.*):(.*)/e","($flag) ? $1 : $2", $str); とするも、うまくできません。 http://www.jp.u4ia.net/~tkyng/php/php_manual_i18n/function.preg-replace.html こちらのサイトの一番下にe修飾の使い方がのっているのですが、これを真似てもうまくいきません。 e修飾の使い方を教えてください。

    • ベストアンサー
    • PHP
  • phpのpreg_replaceで質問です

    お世話になります phpのpreg_replaceで質問です 下記の様な記述にて文字列の置換をしています $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/",$text); コレを改良してcidの次に入る値で処理を分けたいのですが、うまくいきません。 どなたかご教授お願い致します $arr = array("gif","jpg"."png"); $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/$arr[$1]",$text); 宜しくお願い致します

    • ベストアンサー
    • PHP
  • preg_replace 英数字以外の文字の前後のスペースを削除

    preg_replaceで 英数字の前後いずれかのスペースは残して それ以外のスペースを消したいのですが あ a間が消えてしまいます。(英数字前なので消さない) a aはのこるので英数字後のスペースは残せてます。 <?php $str = \"あ a a\"; $txt = preg_replace(\"/([^a-zA-Z\\d])\\s+/u\", \"$1\", $str); echo $txt;

    • ベストアンサー
    • PHP
  • preg_replace内+URLエンコード

    現在、 $hogehoge=preg_replace( "/([^,\(\)]+)/" , '<a href="./hoge.php?hoge=\1">\1</a>', $hoge); このように変数をそのままリンク処理しております。 現在はこの変数に1バイト文字のみしか入っていないのですが、今後2バイト文字も取り扱おうつもりですので、urlencode関数を使いURLエンコードを組み込みたく思います。 このままのカタチで組み込むことは可能でしょうか?

    • 締切済み
    • PHP
  • phpでpreg_replaceで次のような条件の文字を置換したいのですが…

    <a href="jump?url= *1 " target="_blank"> *2 </a> というAタグになっている文字列を *2 だけのテキストにしたいと思っています。 preg_replaceでの正規表現での条件がわかりません…。

    • ベストアンサー
    • PHP
  • PHP5.3以降のereg_replaceについて

    PHP5.3以降にアップデートしたところ、ereg_replaceで書かれている箇所で警告が出るようになりました。 マニュアルを見た限りではpreg_replaceへの移行が推奨されているようなので、preg_replaceに書き換えようと思い、http://melma.com/backnumber_129036_1571788/を参考に、2つ目のパラメータの前後に/を付けましたが、画面に何も表示されず、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、ソースは下記となります。 また、記述はhttp://okwave.jp/qa/q849820.html?&status=true&errcode=&msg=&qid=849820を使用させていただいており、やりたいことはURLに自動的にハイパーリンクを付加したいという状況で、ereg_replaceを使用すればできております。 <?php $proto = "私のブログはhttp://www.hoge.com/です。"; $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$proto); //$proto = preg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","/<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>/",$proto); print $proto; ?> 以上、宜しくお願いします。

    • ベストアンサー
    • PHP
  • preg_replaceでタグだけ置換

    HTMLのタグを別のタグに置換しようとしています。 HTML中に複数ある<a></a>タグ <a href="/w/index.php?title=%E3%83%95%E3%82%B0%E3%83%AA%E3%83%BC%E5%B7%9D&amp;action=edit" class="new" title="フグリー川">フグリー川</a>など という文字列の<a></a>タグを<span style="color:#ff0000;"></span>に置換したいのです。 $pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|'; $replace = '<span style="color:#ff0000 ;">\\1</span>'; preg_replace( $pattern, $replace, $html, -1, $count); print $count; $countの表示は 1 でした。上記のような<a>タグは複数あるのに。 上記のような<a>タグをマッチさせるにはどうパターン表記したらいいでしょうか? PHP5.2.4です。 ご教授お願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう