人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5でURIのフラグメント識別子(#)以降の文字列を取得する方法を教えてください。具体的なコード・もしくはコードが書いてあるページを示していただくようお願いします。

以下の例で、"#1234"もしくは"1234"が取得したい。
(例)http://www.example.jp/test/index.php?id=qwerty#1234

●質問者: leva
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:URI コード フラグメント識別子 文字列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●27ポイント

例題のような文字列から、"#1234"または"1234"を、preg_match() で取り出す為の正規表現という事でよろしいでしょうか?

<?php
$str = 'http://www.example.jp/test/index.php?id=qwerty#1234';
preg_match('/#(.+)$/', $str, $res);

var_dump($res);
?>

で、結果が

array(2) { [0]=> string(5) "#1234" [1]=> string(4) "1234" }

となります。


基本的に、文字列の途中で出てくる事は無いし、#が2回出てくる事もないはずなので上記の例でいいと思うのですが...

◎質問者からの返答

すみません、言葉が足りませんでしたね。

正確には現在のURIを取得して、そのURIの#以降を取得する方法になります。


2 ● wizemperor
●27ポイント

こんな感じでどうでしょう。

// 1234を取得したい場合
$url = "http://www.example.jp/test/index.php?id=qwerty#1234 ";
$regex = "!^https?://[^#]*#(.*)$!i";

if (preg_match($regex, $url, $matches)) {
 $fragment = $matches[1]; // 1234が入る
} else {
 $fragment = "";
}


// #1234を取得したい場合
$url = "http://www.example.jp/test/index.php?id=qwerty#1234 ";
$regex = "!^https?://[^#]*(#.*)$!i";

if (preg_match($regex, $url, $matches)) {
 $fragment = $matches[1]; // #1234が入る
} else {
 $fragment = "#";
}
◎質問者からの返答

id:tezcelloさんに同じです。

フラグメント識別子以降を環境変数か何かから取り出せればいいのですが。


3 ● yokayo
●27ポイント

ここの記述は参考になりますか?

http://www.pistolfly.jp/weblog/2007/11/post_38.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ