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

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

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

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

Q&A

解決済

2回答

991閲覧

PHPでの文字列置換

y_repres

総合スコア15

PHP

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

0グッド

0クリップ

投稿2017/02/22 02:08

よろしくお願いします。
PHPで、ある文字列をhtmlのタブ付テキストに変換する仕組みを作りたいと思っています。

フォームのテキストエリアから、

タイトルあいうえお
かきくけこさしすせそ
たちつてと
タイトルなにぬねの
はいふへほ

↑このような文字列を得て、$bunshoに収めたとします。
これを、最終的には、↓のような文字列に変換したいです。

**<h1>あいうえお</h1>
かきくけこさしすせそ<br>
たちつてと<br>

<h1>タイトルなにぬねの</h1> はいふへほ<br>**

まず、

$bunsho =str_replace("\n","<br>",$bunsho); $bunsho =str_replace("タイトル","<h1>",$bunsho); ```の2つの命令で、↓のようにできました。 **<h1>あいうえお<br> かきくけこさしすせそ<br> たちつてと<br> <h1>なにぬねの<br> はいふへほ<br>** この先がわかりません。 **「"<h1>"の次の"<br>"を"</h1>"に変換する」** というのは、どう書けばいいのでしょうか?

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

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

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

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

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

otn

2017/02/22 03:14

タイプミスとも思えないのですが、「タブ」→「タグ」ですよ。
guest

回答2

0

ベストアンサー

複雑な文字列置換は正規表現の使えるpreg_replaceを使って変換するとよいでしょう。

PHP

1$bunsho ="タイトルあいうえお 2かきくけこさしすせそ 3たちつてと 4タイトルなにぬねの 5はいふへほ"; 6$bunsho = preg_replace('/タイトル(.*)/', '<h1>${1}</h1>', $bunsho); 7$bunsho = str_replace("\n", "<br>", $bunsho); 8echo $bunsho;

タイトル◯◯◯という文字列を見つけて、<h1></h1>で◯◯◯を囲んで変換しています。preg_replaceを先にやらないと改行文字が消えてしまって正規表現の動作が思ったとおりにならないので気をつけましょう。

###修正版
ちょっと修正して要望通りの動作にしてみました。

PHP

1$bunsho ="タイトルあいうえお 2かきくけこさしすせそ 3たちつてと 4タイトルなにぬねの 5はいふへほ"; 6$bunsho = str_replace("\n", "<br>\n", $bunsho); 7$bunsho = preg_replace('/タイトル(.*?)<br>/', '<h1>${1}</h1>', $bunsho); 8echo $bunsho;

https://paiza.io/projects/02vxOD3938EsO1Ca_csSeA

###余談
あと余談ですが、こういった機能を自前で実装するよりも、markdownという仕組みを使うほうが最近のWebではよく見かけます。teratailの質問文を書くときに見出しやリストや太字や斜体が使えるあれです。#や-の記号を使って、それらをHTMLのタグに置き換えて出力する機能です。一度調べてみてはいかがでしょうか。

投稿2017/02/22 02:17

編集2017/02/22 02:25
masaya_ohashi

総合スコア9206

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

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

masaya_ohashi

2017/02/22 02:18

あ、ただこれだと</h1>の後ろにもbrが残ってしまうので少し違うかもしれません…
masaya_ohashi

2017/02/22 02:24

あと余談ですが、こういった機能を自前で実装するよりも、markdownという仕組みを使うほうが最近のWebではよく見かけます。teratailの質問文を書くときに見出しやリストや太字や斜体が使えるあれです。#や-の記号を使って、それらをHTMLのタグに置き換えて出力する機能です。一度調べてみてはいかがでしょうか。
masaya_ohashi

2017/02/22 02:25

コメントに書いた内容をせっかくなので後から見た人の役に立てるよう本文にも写しておきました。
y_repres

2017/02/22 02:35

本当にありがとうございました!! markdownというのも、調べてみます。 ありがとうございました。
guest

0

解決済みのようですが一応正規表現

PHP

1<?PHP 2$bunsho=<<<eof 3タイトルあいうえお 4かきくけこさしすせそ 5たちつてと 6タイトルなにぬねの 7はいふへほ 8 9eof; 10 11$pattern=["/(?<=^|[\n\r])タイトル(.+?)[\n\r]+/s","/(?<!<\/h1>)([\n\r]+)/s"]; 12$replacement=["<h1>\\1</h1>\n","<br>\\1"]; 13$bunsho=preg_replace($pattern,$replacement,$bunsho); 14print $bunsho; 15 16print "<hr>"; 17print "<pre>"; 18print htmlspecialchars($bunsho);

投稿2017/02/22 02:56

yambejp

総合スコア114784

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問