質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

365閲覧

preg_replaceがうまくいかない

d0ne1s

総合スコア32

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/12/03 08:45

掲示板の返信機能を作成中です。
コメントの右下にある「返信」ボタンを押すと、「>>56」のように>>と返信先のコメント番号が自動的にテキストエリアに入力される仕組みです。
そしてコメント上での「>>56」の部分は

html

1<a href="#56"> >>56 </a>

という表示にし、クリックすると該当のコメントにとぶようにしたいと考えております。

phpのpreg_replace関数を利用し、以下のようなコードを作成しました。

php

1$pattern = '/(>>([0-9]+))/'; 2$replace = '<a href="#$2">$1</a>'; 3$test = preg_replace($str, $replace, '>>56あああ'); 4print $test;

その結果「>>56」の部分のみリンクで表示されました。

しかし、これを以下のようにデータベースから取ってきた値にかけると、リンクが生成されません。

php

1$items = count($rows);//$rowsがデータベースから取ってきた配列 2$pattern = '/(>>([0-9]+))/'; 3$replace = '<a href="#$2">$1</a>'; 4for($i=0; $i<$items; $i++) { 5$str = $rows[$i]['content'];//['content']にコメントの中身が入っています 6$link = preg_replace($pattern, $replace, $str); 7$rows[$i]['content'] = $link; 8}

この処理の結果、リンクのない元の値が表示されます。

ループの途中で

php

1print $str;

と出力をしてみましたが
「>>50
ありがとうございます。」
のような値が出力されました。

どなたかお力をお貸しください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/12/03 08:59

$rowsの具体的なサンプルをつけてください
guest

回答1

0

ベストアンサー

php

1print $str;

でブラウザで表示確認してるような気がするのですが>&gt;だったりしませんか?
(htmlspecialcharsで変換かけてHTML特殊文字にしてるとかないですか?)

投稿2018/12/03 08:58

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d0ne1s

2018/12/03 09:02 編集

まさに特殊文字に変換してます。 ただ「>」は「>」のまま表示されていました。 試してみます。 ありがとうございます。
d0ne1s

2018/12/03 09:05

htmlspecialcharsの処理をコメントアウトしたら、リンクになりました。
rururu3

2018/12/03 09:07

htmlspecialcharsの処理入れないと何かとまずかったら/(&gt;&gt;([0-9]+))/こういうパターンで行けるかと
d0ne1s

2018/12/03 09:10

その後 $patternの「>>」を「&gt;&gt;」に変更して無事にhtmlspecialcharsをかけることもできました。 助かりました。 ありがとうございました!
d0ne1s

2018/12/03 09:12

画面を再読み込みしていなかった影響でコメントが入れ子状になりましたが、 /(&gt;&gt;([0-9]+))/ のパターンで自己解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問