Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разбор URL и # анкер
 
 автор: Petter   (11.11.2011 в 15:11)   письмо автору
 
 

Вопрос мой может быть и покажется кому-то странным.
Все мы знаем, что в HTML ссылка вида
<A href="http://www.mysite/mypage.html#myparagraph>ТЕКСТ ССЫЛКИ</A>
приведёт не только на указанную страницу, но и заставит броузер прокручивать её, если указанный параграф не в начале.

А вопрос вот в чём : если пытаться разобрать этот или аналогичный URL с помощью PHP - можно ли выделить этот самый элемент из URL ( #myparagraph ) - или PHP попросту не видит такой анкер и для PHP одно и то же, что http://www.mysite/mypage.html#myparagraph и что http://www.mysite/mypage.html ?

Во всяком случае, когда я распечатываю $_SERVER["PHP_SELF"], то адрес http://www.mysite/mypage.html#myparagraph он выдаёт как http://www.mysite/mypage.html, то есть для этой переменной нет разницы.
Есть ли какие-то переменные в PHP, способные увидеть анкер в URL типа http://www.mysite/mypage.html#myparagraph ? Или PHP видит только если написать http://www.mysite/mypage.html?p=myparagraph ?

  Ответить  
 
 автор: Ильдар   (11.11.2011 в 16:39)   письмо автору
 
   для: Petter   (11.11.2011 в 15:11)
 

как я знаю в php нет возможности узнать anchor

  Ответить  
 
 автор: Petter   (11.11.2011 в 19:48)   письмо автору
 
   для: Ильдар   (11.11.2011 в 16:39)
 

И тем не менее...
Если броузер посылает запрос вида http://www.site/page.html#anker , то независимо ни отчего сервер реагирует на это и выдаёт броузеру именно такой URL.
Наверное, как-то заголовком, но как?
В таком вопросе нужен специалист по принципу обмена данными броузера и сервера... а это уже и не совсем, конечно, PHP

  Ответить  
 
 автор: Ильдар   (11.11.2011 в 20:45)   письмо автору
 
   для: Petter   (11.11.2011 в 19:48)
 

нет, сервер тоже не понимает такой ссылки. Это понимает javascript и он реагирует тем, что создает к примеру get запрос вида http://www.site/pages.php?action=anker и получает ответ от сервера в виде каких-либо данных, а потом javascript выводит эти данные в бразуер на странице http://www.site/page.html#anker. Вам кажется что сервер вас понял и выдал вам, что нужно? Нет, это всего лишь javascript сделал на странице подменю информации.

  Ответить  
 
 автор: Petter   (12.11.2011 в 00:28)   письмо автору
 
   для: Ильдар   (11.11.2011 в 20:45)
 

Вот это и составляет мой вопрос.

Ясное дело, что запрос, конечно, был со стороны броузера, и что сервер "понял" запрос и ответил, и у меня в этом и заключается вопрос.
Если сервер посылает данные об анкере, значит, он их имеет. Ещё бы он их не имел! Ведь эти данные о ссылке находятся на странице, которую он хранит! Вопрос-то в том, где он хранит данные об анкере, и можно ли к ним туда добраться скриптом, если мне надо, с помощью PHP ?
Наверное, есть какой-то массив этих анкеров... но что гадать... просто я не нашёл этого в спецификации PHP, поэтому и спросил.

А то, что потом делает броузер - об этом я не спрашивал, это ясно.

  Ответить  
 
 автор: cheops   (12.11.2011 в 00:37)   письмо автору
 
   для: Petter   (12.11.2011 в 00:28)
 

Штука в том, что PHP видит только то, что помещается в переменные окружения, а анкер в переменные окружения не попадает, поэтому вы не можете его извлечь на стороне сервера (хотя в ссылках можете его использовать без ограничений). Грубо говоря остается в браузере и браузер просто позиционирует страницу в соответствии с ним.

  Ответить  
 
 автор: Petter   (12.11.2011 в 02:19)   письмо автору
 
   для: cheops   (12.11.2011 в 00:37)
 

Спасибо, Cheops !
Т. е. если я правильно Вас понимаю, у сервера есть страница, или как-то иначе, в базе, данные об анкере и он их присылает протоколом, а вот PHP "не в курсе" и не хранит эти анкеры в переменных и не может этот поток передачи данных об анкере контролировать...

  Ответить  
 
 автор: cheops   (12.11.2011 в 02:21)   письмо автору
 
   для: Petter   (12.11.2011 в 02:19)
 

Серверу тоже анкер не нужен, он нужен только браузеру, браузер, если он по-нормальному написан его отправлять никуда не будет. Все URL в которых используется #, как правило, обвешены JavaScript-кодом, который приводит URL к каноническому виду.

  Ответить  
 
 автор: cheops   (12.11.2011 в 02:30)   письмо автору
 
   для: Petter   (12.11.2011 в 02:19)
 

Дело в том, что # даже не является допустимым символом для URL - его кодировать нужно, чтобы сервер его мог корректно получить.

  Ответить  
 
 автор: Sfinks   (12.11.2011 в 18:01)   письмо автору
 
   для: Petter   (12.11.2011 в 02:19)
 

Не совсем верно!
Серверу вообще не передается анкер и он не в курсе, что в URL он изначально присутствовал. Анкер в урл управляет поведением браузера локально. Только браузера и только локально! Т.е. если адекватный браузер видит в УРЛ фрагмент #абракадабра, то он ищет в коде загруженной ХТМЛ страницы анкер с тем же названием и отматывает страницу в это место. Ну а раз уж сервер не знает про анкер, то ПХП и подавно =)

  Ответить  
 
 автор: Petter   (14.11.2011 в 23:36)   письмо автору
 
   для: cheops   (12.11.2011 в 00:37)
 

Спасибо, Сheops.
Я понял.
Действительно, серверу незачем знать про анкер, раз он не попадает в QUERY_STRING.
Достаточно того, что броузер помнит о том, о чём он запрашивал.
Сервер просто в таком случае отдаёт страницу.
Спасибо и всем остальным, кто ответил.

  Ответить  
 
 автор: AlexSol   (11.11.2011 в 20:47)   письмо автору
 
   для: Petter   (11.11.2011 в 19:48)
 

это в браузер заложено. в php значение после # не получить

  Ответить  
 
 автор: Tamplier   (12.11.2011 в 11:00)   письмо автору
 
   для: AlexSol   (11.11.2011 в 20:47)
 

Да запросто - parse_url()
Вам нужно значение - fragment

http://php.su/functions/?f=parse-url&choice=info

  Ответить  
 
 автор: ride   (17.11.2011 в 19:58)   письмо автору
 
   для: Tamplier   (12.11.2011 в 11:00)
 

а что в фугкцию передавать будем?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования