[PHP-users 34100] Re: URIに#を付けるとQUERY_STRINGが渡らない

HOTTA Michihide hotta @ net-newbie.com
2008年 10月 29日 (水) 19:24:37 JST


堀田@長崎市です。

On Wed, 29 Oct 2008 17:29:00 +0900 
"KOYAMA Tetsuji" <koyama @ hoge.org> wrote:
Subject: [PHP-users 34099] Re: URIに#を付けるとQUERY_STRINGが渡らない

> 小山です。ご無沙汰しています。

ぽすぐれ温泉合宿の際はどうもでした。

> 2008/10/29 HOTTA Michihide <hotta @ net-newbie.com>:
> > URI に '#' が含まれる場合、QUERY_STRING が取れないようなのですが、
> > どう表記すればいいでしょうか?
> 
>  next.php?hoge=fuga#tag
> 
> ならば # より手前の URL を取得して、 tag にジャンプしてくれますね。
> 
> next.php#tag?hoge=fuga
> 
> だと "tag?hoge=fuga" をアンカー名だと解釈するのかな?

これでうまくいきました。。。と一瞬思いましたが、これだけではこち
らで想定する動作にはなりませんでした。

というか、そもそも、私が質問の際に提示した例が不適切でした。
以下のような感じで、リンクの際のクッションページを作ってました。

$ cat index.html
<html><body>
<a href="next.php?uri=http://localhost?hoge=fuga">#なし</a><br />
<a href="next.php?uri=http://localhost#tag?hoge=fuga">#つき</a><br />
<a href="next.php?uri=http://localhost?hoge=fuga#tag">#を末尾に</a><br />
</body></html>

これで uri に http://localhost#tag が入ってきたら、

  <a href="http://localhost#tag">$_GET['hoge']</a>にジャンプします

  # 良い子は入力文字列の妥当性を(ry

みたいな出力を想定していました(fugaは実際は日本語文字列)。

ところがよく考えてみると、uri の末尾の #タグはブラウザが解釈する
ものであって、サーバ側には渡されないみたいですね。これじゃ取れな
いはずだ。

仕方がないので、'#tag' の '#' 以外の部分を別の変数で渡してやって、
php 側で # をくっつけて uri を生成してやるようにしました。

<a href="next.php?uri=http://localhost?hoge=fuga&tag=tag">
タグ付きバージョン</a><br />

どうもありがとうございました。しょうもないオチですみません。

-- 
HOTTA Michihide <hotta @ net-newbie.com>


PHP-users メーリングリストの案内