Forum Webscript.Ru

Программирование => PHP => Тема начата: Alexandr от 12 Июня 2002, 10:06:42

Название: Как якоря header\'ом посылать?
Отправлено: Alexandr от 12 Июня 2002, 10:06:42
Пишу
$url="script.php?p=34#anchor";
header("Location: $url");
А получаю
http://localhost/script.php?p=34

Пишу
$url=URLEncode("script.php?p=34#anchor");
header("Location: $url");
А апч говорит
Forbidden
You don\'t have permission to access
http://localhost/script.php?p=34#anchor on this server

Что делать что бы якоря засылать???
Название: Как якоря header\'ом посылать?
Отправлено: ЖеньКа от 12 Июня 2002, 14:21:02
Имхо тут из-за спец символов ботва. Выходов 2 как мне кажется - 1) двойные кавычки 2) обратные слэши.
Я верно мыслю, спецы? :)
Название: Как якоря header\'ом посылать?
Отправлено: Alexandr от 13 Июня 2002, 08:25:50
Всё перепробовал не помогло.
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 13 Июня 2002, 10:12:24
Alexandr
Ну второй вариант точно неправильный. А первый по идее должен работать.
Название: Как якоря header\'ом посылать?
Отправлено: Alexandr от 13 Июня 2002, 10:31:30
Цитировать
Ну второй вариант точно неправильный. А первый по идее должен работать.

Ну второй-то да. Я просто по всякому экспериментировал.
А первый ни хрена не робит. Выкидывает что после # включительно.
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 13 Июня 2002, 12:23:37
У меня твой пример работает без проблем.
Название: Как якоря header\'ом посылать?
Отправлено: ЖеньКа от 13 Июня 2002, 21:06:40
$url=\'"script.php?p=34#anchor"\';
А вот так пробовал тоже?
Название: Как якоря header\'ом посылать?
Отправлено: Ardzhan от 14 Июня 2002, 19:16:53
Попробуй так

$url=htmlentities($url);

если вдруг не сработает
вместо "#" пиши "%23" - это точно должно работать!
Название: Как якоря header\'ом посылать?
Отправлено: AlieN от 14 Июня 2002, 20:31:22
Спокуха мальчики и девочки:

$url="test.php?p=blabla#anchor";
if(!$p){header("Location: $url");exit();}
if($p){?>

print "P = $p
";
print_r(get_defined_vars());
?>

Название: Как якоря header\'ом посылать?
Отправлено: Ardzhan от 14 Июня 2002, 20:54:04
AlieN Кто еще мальчик?

Цитировать
Спокуха мальчики и девочки:

-ну и что ты этим хотел сказать? Не думаю что твой код будет работать.
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 15 Июня 2002, 10:40:13
AlieN
Я тоже не понял, в чем фишка твоей версии.
Название: Как якоря header\'ом посылать?
Отправлено: AlieN от 17 Июня 2002, 12:06:08
Ardzhan
Цитировать
Не думаю что твой код будет работать.

Проверить не судьба? Почему ты думаешь что он не будет работать ???
GotZfild
Apache 1.3.22
PHP 4.1.2 у меня редирект идеально работает без всякого urlencode, когда его включаешь то пишет как раз то , про что
говорил Alexandr  :
Цитировать
Forbidden
You don\'t have permission to access

Цитировать
в чем фишка твоей версии

А в чём фишка кодирование символа "#" ?
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 17 Июня 2002, 12:40:42
AlieN
Так ведь человек обратился с тем же кодом, что ты и предложил, только немного "завернув" это в другой код, но суть-то остается той же.
Вот смотри
Цитировать
Пишу
$url="script.php?p=34#anchor";
header("Location: $url");

У тебя
Цитировать
$url="test.php?p=blabla#anchor";
if(!$p){header("Location: $url");exit();}

А насчет кодирования, я сразу сказал, что это неверно.
Название: Как якоря header\'ом посылать?
Отправлено: AlieN от 17 Июня 2002, 13:09:01
GotZfild
и что?
у меня в коде видно
Цитировать
print_r(get_defined_vars());

вот смотри результат вывода:
[url] => test.php?p=blabla#anchor


            [SERVER_SOFTWARE] => Apache/1.3.24 (Win32) PHP/4.1.3-dev
            [SystemRoot] => C:\\\\WINDOWS
            [WINDIR] => C:\\\\WINDOWS
            [GATEWAY_INTERFACE] => CGI/1.1
            [SERVER_PROTOCOL] => HTTP/1.1
            [REQUEST_METHOD] => GET
            [QUERY_STRING] => p=blabla
            [REQUEST_URI] => /test.php?p=blabla#anchor
            [SCRIPT_NAME] => /test.php
            [PATH_TRANSLATED] => c:/apache/htdocs/test.php
            [PHP_SELF] => /test.php
            [argv] => Array
                (
                   
                )

            [argc] => 1

И в чём я не прав?
Название: Как якоря header\'ом посылать?
Отправлено: Ardzhan от 17 Июня 2002, 17:06:10
AlieN
Цитировать
Проверить не судьба? Почему ты думаешь что он не будет работать ???

Проверил, но не твой. Начал с самого простого. Что вы тут мозги парите!!!

$url="script.php?p=34#anchor";
header("Location: $url");
?>

Работает на ура!!!
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 17 Июня 2002, 17:33:24
AlieN
Цитировать
И в чём я не прав?

Я не говорю, что ты не прав. Это и у меня работает без проблем. Просто если у человека его вариант не работает, то и твой, соответственно, тоже.
Название: Как якоря header\'ом посылать?
Отправлено: AlieN от 17 Июня 2002, 18:02:03
GotZfild
Цитировать
Проверил, но не твой.

хм....
Чем они принципиально отличаются?
$url="test.php?p=blabla#anchor"; это мой вариант
$url="script.php?p=34#anchor"; это твой
Цитировать
Что вы тут мозги парите!!!

Что ты паришь?!?!?!? :)
Название: Как якоря header\'ом посылать?
Отправлено: GotZfild от 17 Июня 2002, 21:36:42
Цитировать
$url="script.php?p=34#anchor"; это твой

AlieN
Ты не мои сообщения цитируешь.
И тем более такого я уж не писал:
Цитировать
Что вы тут мозги парите!!!

Цитировать
Чем они принципиально отличаются?
$url="test.php?p=blabla#anchor"; это мой вариант
$url="script.php?p=34#anchor"; это твой //еще раз, это не мой

Об этом и речь, что они ничем не отличаются. Поэтому, если его вариант не работает, то и твой тоже будет нерабочим.
Название: Как якоря header\'ом посылать?
Отправлено: Alexandr от 18 Июня 2002, 09:17:55
Так ребята тут у меня вообще мистика какая-то:
мой вариант (самый элементарный у меня тоже работает)........
Есть достаточно большой и сложный скрипт, который имеет следующию структуру:
////////////////////////

function page1(){
.............//здесь есть тег с якорем.
}
function page2(){
.............
}
function page3(){
header (Location: script.php?page=main#anchor);
}
switch ($page){
case "main": page1();break;
case "detail": page2();break;
case "add": page3();break;
}

ОН НЕ РОБИТ!!!
Если убрать остальные процедуры, то всё заработает!
Не знаю чё делать....... Буду методом проб и ошибок искать момент после которого перестают работать якоря :-(
ЗЫ а скрипт действительно большой :-(
Название: Как якоря header\'ом посылать?
Отправлено: Ardzhan от 18 Июня 2002, 21:27:33
AlieN
Цитировать
Чем они принципиально отличаются?



$url="test.php?p=blabla#anchor";
if(!$p){header("Location: $url");exit();}
if($p){?>

print "P = $p
";
print_r(get_defined_vars());
?>


Это твой код! Зачем проверять переменную $p??? Зачем тут выводить html?
А это мой:

$url="test.php?p=blabla#anchor";
header("Location: $url");

Gj-моему твой гораздо длиннее
Название: Как якоря header\'ом посылать?
Отправлено: AlieN от 19 Июня 2002, 10:22:46
Цитировать
Это твой код! Зачем проверять переменную $p???

Если не указана переменная p то скрипт редиректит сам на себя и передаёт переменную $p

[OFF]В лом было на два файла разбивать[/OFF]