header('Location : url xxxxxxxx'); Проблема с кириллицей в url

marz21

Новичок
header('Location : url xxxxxxxx'); Проблема с кириллицей в url
У меня похожий на эту проблему вопрос, но решения с помощью указанных функций не нашёл, как и ответа на форуме...
в состав url у меня входит решётка, после редиректа url перед решёткой полностью обрывается, а при использовании в Location функции urlencode() - решётка заменяется в url на %23
Мой вопрос: Как мне отобразить в url решётку # или каким ещё методом после редиректа показать нужное место на странице?
 

Фанат

oncle terrible
Команда форума
для начала нужно прочесть правила форума.
затем привести пример своего редиректа.

именно в такой последовательности
 

white phoenix

Новичок
marz21
[m]urlencode[/m] надо делать не для всей ссылки, а только для названий и значений параметров. Т.е.
PHP:
$array = array( 'name' => 'Вася', 'lastname' => 'Пупкин');
foreach ($array as $key=>$value) {$strparams .= urlencode($key).'='.urlencode($value).'&';}
header('Location: http://site/page'.($strparams?'?'.$strparams:'').'#bookmark');
// Заголовок: Location: http://site/page?name=%C2%E0%F1%FF&lastname=%CF%F3%EF%EA%E8%ED&#bookmark
Подумай сам, ведь если всю ссылку обрабатывать urlencode'ом, то смысл теряется. А смысл в том чтобы явно указать литерал, и не думать о его мета-символьном назначении.
 

marz21

Новичок
пример моего редиректа:

header("Location: ".$_SERVER['PHP_SELF']."?action=senden&file_1=".(isset($file_1)?$file_1:'0')."&file_2=".(isset($file_2)?$file_2:'0').urlencode("#foto_1"));
exit;

получаем:

....php?action=senden&file_1=0&file_2=9164_b.jpg%23foto_1

-~{}~ 24.01.06 16:16:

на месте %23 нужна решётка...
 

Фанат

oncle terrible
Команда форума
согласно стандартам, локейшен должен производиться по полному урлу.

-~{}~ 24.01.06 16:16:

на месте %23 нужна решётка
ну если тебе нужна решётка вместо 23, то зачем ты пишешь %23?
 

white phoenix

Новичок
# надо urlencode'ить только в том случае если хочешь передать '#' в параметре запроса, а если он идет как мета-символ (мета = управляющий), то не надо.
PHP:
header("Location: ".$_SERVER['PHP_SELF']."?action=senden".
"&file_1=".(isset($file_1)?$file_1:'0')."&file_2=".(isset($file_2)?$file_2:'0')."#foto_1");
exit;
 

marz21

Новичок
мне нужен url такого вида:

....php?action=senden&file_1=0&file_2=9164_b.jpg#foto_1

если в Location убрать функцию urlencode(), то url передаётся так:

....php?action=senden&file_1=0&file_2=9164_b.jpg

Мой вопрос: как мне передать url с решёткой или ккак открыть страницу после редиректа на нужном месте другим способом?
 

marz21

Новичок
решётка нужна для открытия страницы в нужном месте по метке <a name="foto_1">
 

Фанат

oncle terrible
Команда форума
marz21
да что ты говоришь? неужели для открытия страницы в нужном месте по метке?
слушай, ты так интересно рассказываешь! а для чего нужен вопросик?
 

marz21

Новичок
решётка нужна для открытия страницы в нужном месте по метке <a name="foto_1">
это не утверждение, а поиск решения...

это она (решётка) мне нужна в url чтобы перейти на метку в моей странице...
если есть другие варианты ответов на конкретный вопрос по решётке или открытию страницы в нужном месте после header('Location: xxxx') - буду благодарен...
 

white phoenix

Новичок
Фанат
Прошу прощенья если что-то не так, это как пример просто, думаю он должен был понять.
marz21
Читай выше. Другие варианты существуют, но они тебе не нужны.
 

marz21

Новичок
похоже, что я где-то не догоняю... :)

после редиректа
header("Location: http://xxxxxxxxxx.php#foto_1")

получаем страницу с url http://xxxxxxxxxx.php

а нужно http://xxxxxxxxxx.php#foto_1

из всего вышенаписанного, к сожалению, я не нашёл для себя ответа... что я просмотрел там?
 

marz21

Новичок
проблема в браузере... проверил на Mozilla Firefox - там всё прекрасно работает, а на IE-6 всё так, как я и описал выше...
кто-нибудь может этот баг прокомментировать?
 

white phoenix

Новичок
Фанат
Да. Работает.
PHP:
$strparams = ''; // сначала случайно не скопировал эту строчку. Notice. Headers already sent..
$array = array( 'name' => 'Вася', 'lastname' => 'Пупкин', 'param' => 1);
foreach ($array as $key=>$value) {$strparams .= urlencode($key).'='.urlencode($value).'&';}
if (!$_REQUEST['param']) {header('Location: test.php'.($strparams?'?'.$strparams:'').'#bookmark');}
else {echo 'Ok';}
Перешел на "test.php?name=%C2%E0%F1%FF&lastname=%CF%F3%EF%EA%E8%ED&param=1&#bookmark" и вывел "Ok".
PHP:
if (!isset($_REQUEST['file_1']))
{
 header("Location: ".$_SERVER['PHP_SELF'].
 "?action=senden". "&file_1=".(isset($file_1)?$file_1:'0')."&file_2=".(isset($file_2)?$file_2:'0')."#foto_1"); exit;
}
else {echo 'Ok';}
Перешел на "test.php?action=senden&file_1=0&file_2=0#foto_1", аналогично вывел "Ok".
marz21
А какая версия IE и OS?
 
Сверху