質問: phpの値受け渡しとアンカーを一緒に使用できますか? 今、phpでデータベースと連携してページを作成しています。 同じページ内をcssで左側と右側にまず分けています。 左側に目次をつくり、文字をクリックするとそれに対応した内容をデータベースから読み込み、右側に表示するというページを作成しました。 しかし、右側に表示する文章がデザインの都合上、下の方に表示しているので、目次をクリックするたびにスクロールしなければいけません。 それをなくすために、同じページ内にアンカーを作成して、 クリックしたらそのアンカーに飛ぶようにしたいのですが、うまくいきません。。 うまく説明できないのでコードで書きますが、つまり index.phpというページの左側には a b c というように目次の文字が羅列してあって、 aのリンクは「index.php?name=a」というようにしておいて、 aをクリックしたらそのページの$nameに「a」を渡したページを表示します。 で、やりたいことは同ページ内にアンカー「tag」を埋め込んであるので、できたらindex.php#tagを表示させたくて、 気持ちとしてはaをクリックしたら「index.php#tag?name=a」というページを表示したいのですが、このコードだとうまく表示されません。 値受け渡しとアンカーを同時に使用する方法があったら教えていただきたいです。 説明が下手ですみません>< わかる方いたら、ぜひお願いいたします。
回答: クエリとフラグメントの順が逆 index.php#tag?name=a → index.php?name=a#tag [quote cite="http://www.studyinghttp.net/rfc_ja/rfc3986#sec3 "] ・path は、最初の疑問符 ("?") か数字記号 ("#") の文字、あるいは uri の終わりによって終結する。 ・query 構成要素は、最初の疑問符 ("?") 文字によって始まり、数字記号 ("#") 文字、あるいは uri の終わりによって終結する。 ・fragment 識別子構成要素は、数字記号 ("#") 文字の存在によって表され、uri の終わりによって終結する。 fragment = *( pchar / "/" / "?" ) fragment 識別子の意味論は、主要リソースへの取得動作から生じるであろう表現の集合によって定義される。 従って、fragment の形式と解決は、例えその uri が逆参照される場合にのみ、そのような取得が実行されるとしても、取得されうる表現のメディアタイプ [rfc2046] に依存する。 そのような表現が存在していなければ、fragment の意味論は未知であるとみなされ、事実上制限されない。 ... スラッシュ ("/") と疑問符 ("?") 文字は、fragment 識別子内でデータを表す事ができる。いくつかの古い、エラーのある実装では、それが相対的参照 (section 5.1) の基底 uri として使用される場合、そのようなデータを正しく扱わないかもしれない事に注意せよ。 [/quote] 「 #tag?name=a 」のように tag の後にクエリを置いた場合、「tag で示される部分集合に」データとして渡されるようです。(x)html に限れば、fragment(#以降)は id または、name なので、クエリ("?" 以降)を指定した場合の動作は不定、ブラウザによりけりだと思います。(未検証) cf.) http://www.w3.org/tr/xhtml1/#c_8