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

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

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

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

Q&A

解決済

3回答

2719閲覧

preg_replaceの中にurlencodeを使ってURLパラメータを設定したいが出来ない

sattch02

総合スコア20

PHP

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

0グッド

0クリップ

投稿2015/10/04 11:22

カンマで区切られている文字列に対してpreg_replaceとurlencodeを用いてpreg_replaceの正規表現で抜き出した文字をurlencodeでエンコードしたものをURLパラメータとして設定したいです。

下記ソースの中にある変数、$idListの中身は「1,2,3,4,5,6,」の様な文字列が入っており、preg_replaceでカンマで句切られている数字を1つずつ抽出し、抜き出した数字をurlencodeでエンコードしてURLパラメータとして設定したいです。

自分の調べた限りではpreg_replaceの中でurlencodeは使えると分かったのですが、下記のやり方だと$1という文字がエンコードされてしまいます…。

PHPのバージョンは5.3系です。

<?php echo preg_replace('%([^,]+)%', '<a href="index.php?id='. urlencode('$1') . '">' . '$1' . '</a>', $idList; ?>

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

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

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

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

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

guest

回答3

0

ベストアンサー

ご質問の内容なら、正規表現を使わない方が簡潔に書けます。

PHP

1<?php 2$idList = '1,2,3,4,5,6,'; 3 4foreach (explode(',', $idList) as $id) { 5 if (strlen($id) > 0) { // 空文字列を除外する 6 echo '<a href="index.php?id=' . urlencode($id) . "\">$id</a>\n"; 7 } 8} 9?> 10 11<!-- 実行結果 --> 12<a href="index.php?id=1">1</a> 13<a href="index.php?id=2">2</a> 14<a href="index.php?id=3">3</a> 15<a href="index.php?id=4">4</a> 16<a href="index.php?id=5">5</a> 17<a href="index.php?id=6">6</a>

ちなみに、変数$idListは
"数字がカンマ区切りされた文字列"
であることが保証されている場合、urlencodeを使う必要はありません。

数字をURLエンコードしても、もとの数字のままだからです。
http://php.net/manual/ja/function.urlencode.php

投稿2015/10/05 03:27

KiyoshiMotoki

総合スコア4791

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

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

sattch02

2015/10/06 00:50

ありがとうございます。
guest

0

自分の調べた限りではpreg_replaceの中でurlencodeは使えると分かったのですが、

urlencodeは、URLとして使うときに変換するための物なので、preg_replaceの中で使うという考えがそもそも間違っています。
"1,2,3,4,5"というデータに対してどういうURLにしたいのでしょうか?それに応じて適切な方法があると思います。

投稿2015/10/04 12:02

otn

総合スコア84538

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

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

sattch02

2015/10/04 12:57

自分の中の想定としては例で上げてる"1,2,3,4,5"というデータを正規表現で1つずつ抜き出し、抜き出したモノをurlencodeしてそれをURLパラメータにしたいのです。 下記のような形に持って行きたいです。 <a href="index.php?id='※正規表現で抜き出した1をurlencodeした結果'>1</a> <a href="index.php?id='※正規表現で抜き出した2をurlencodeした結果'>2</a> <a href="index.php?id='※正規表現で抜き出した3をurlencodeした結果'>3</a> <a href="index.php?id='※正規表現で抜き出した4をurlencodeした結果'>4</a> <a href="index.php?id='※正規表現で抜き出した5をurlencodeした結果'>5</a> <a href="index.php?id='※正規表現で抜き出した6をurlencodeした結果'>6</a> 色々と至らぬ所があり申し訳ないです。
otn

2015/10/05 05:07

そういうことであれば、preg_replaceの中で処理するのでなく、KiyoshiMotoki さんの回答のような方法が良いですね。
guest

0

preg_replace_callback

この関数の動作は、ほぼ preg_replace() と同じですが、 replacement の代わりに callback を指定するところが異なります。

投稿2015/10/04 11:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問